Phát hiện và phòng ngừa WebShells theo cách của NSA

DDos

VIP Members
22/10/2013
524
2.191 bài viết
Phát hiện và phòng ngừa WebShells theo cách của NSA
Trong lĩnh vực thử nghiệm thâm nhập ứng dụng web, bước cuối cùng mà mọi hacker, người kiểm thử mong muốn là có một kết nối từ webserver của nạn nhân tới máy tính của mình để kiểm soát hệ thống mục tiêu, hình thức kiểm soát này được thực hiện dễ dàng nhất qua một công cụ gọi chung là webshell. Vậy webshell là gì?

Webshell là một phần mềm độc hại được hacker tải lên hệ thống mục tiêu nhằm thực hiện mục đích chiếm quyền quản lý của website. Webshell có khả năng thực hiện các lệnh hệ thống và thường được gửi thông qua giao thức HTTPS. Web shell là một kỹ thuật tấn công nổi tiếng, nhưng chúng thường khó phát hiện do kỹ thuật lẩn trốn của hacker ngày càng tinh vi. Trong bài viết này mình sẽ hướng dẫn các bạn cách phát hiện và phòng ngừa WebShell theo hướng dẫn của NSA.

Phát hiện WebShells
  • So sánh các tệp trên Webserver với các tệp nguyên bản của ứng dụng
    Phương pháp hiệu quả nhất để phát hiện hầu hết các web shell là so sánh các tệp trên máy chủ web với các tệp nguyên bản của ứng dụng đó. Đặc biệt khi bạn cập nhật ứng dụng sẽ có những thay đổi nhất định trên webserver, do bạn bạn nên tải về các tệp từ nhà sản xuất và so sánh nó với các tệp hiện tại trên webserver của bạn để xác định những file bất thường. Quản trị viên có thể lập trình so sánh trang web của mình với các file nguyên bản của nhà sản suất ứng dụng để xác định các tệp được thêm hoặc thay đổi. Những tập tin này có thể được xem xét thủ công để xác minh tính xác thực. Hướng dẫn bên dưới về cách thực hiện so sánh tệp trong môi trường Windows hoặc Linux.
    Microsoft đã phát triển một công cụ có tên WinDiff cho phép so sánh tệp hoặc thư mục. Trong hầu hết các trường hợp, công cụ đơn giản nhưng mạnh mẽ này đủ để so sánh các tệp nguyên bản của ứng dụng web với các tệp trên webserver của bạn. Cú phát của công cụ này như sau:
    Trên hệ điều hành Windows
    PS > .\dirChecker.ps1 -knownGood "<PATH>" -productionImage "<PATH>"
    Trên Linux có một công cụ tương tự gọi là diff.
    Hình ảnh bên dưới là so sánh tất cả các tệp trên một trang web sử dụng WordPress với các tệp mà mình tải từ trang chủ WordPress
    Capture.PNG

    Như bạn có thể thấy, file license.txt đã bị thay đổi so với tệp gốc. Từ đây, bạn sẽ tiến hành kiểm tra trực tiếp tệp này để phát hiện đó có phải là một webshell hay không.
  • Phát hiện các yêu cầu bất thường trên webserver logs
    Một số thuộc tính của webshell rất khó ngụy trang và thường bị hacker bỏ qua đó là: User agent HTTP header, Referrer HTTP header, IP Addresses
    + User agent HTTP header: Dựa vào bản log trên websever, chúng ta sẽ phân tích để phát hiện các loại User-agent khác nhau, từ đó xác định User-agent nào là phổ biến, User-agent nào không phổ biến. WebShells thường có các User-agent ít phổ biến.
    + Referrer HTTP header
    http-referer-chrome1.png

    Đối với hầu hết các ứng dụng web, mỗi yêu cầu người dùng được thêm vào Referrer Header cho biết URL mà yêu cầu người dùng bắt nguồn từ đó. Ngoại lệ chính cho điều này là các trang cấp gốc (root), thường được đánh dấu hoặc truy cập trực tiếp. Kẻ tấn công có thể bỏ qua Referrer Header khi ngụy trang lưu lượng WebShell. Do đó, các yêu cầu này sẽ xuất hiện bất thường trong nhật ký máy chủ web.
    + IP Addresses: Tùy thuộc vào chiến thuật tấn công của kẻ tấn công và môi trường nạn nhân, các địa chỉ IP được sử dụng để tiến hành cuộc tấn công có thể xuất hiện bất thường. Chẳng hạn, một ứng dụng web chủ yếu có thể được người dùng nội bộ truy cập từ một mạng con cụ thể. Tuy nhiên, kẻ tấn công có thể truy cập WebShell từ một địa chỉ IP bên ngoài mạng con (subnet) thông thường.
    Phát hiện WebShell theo phương pháp này thường không mang lại sự chính xác như cách so sánh các tệp nguyên bản, bởi hacker có thể dễ dàng ngụy trang WebShell với 3 tham số trên giống như người dùng bình thường.
    Công cụ Splunk có thể giúp bạn xác định URI được truy cập bởi User Agents, IP addresses, và Referrer HTTP header không phổ biến.
    Tập lệnh PowerShell dưới đây sẽ cố gắng xác định các mục bất thường trong nhật ký máy chủ web IIS có thể chỉ ra sự hiện diện của WebShell. Tệp lệnh này sẽ tính toán các URIs được xử lý bởi WebServer.
    PS > .\LogCheck.ps1 -logDir "<path to IIS log directory>"
    logfile.PNG

    Tập lệnh Python sẽ cố gắng xác định các mục bất thường trong nhật ký máy chủ web Apache có thể chỉ ra sự hiện diện của WebShell. Tập Python này lệnh tính toán các URI được máy chủ xử lý thành công, mà các URI này đã được yêu cầu bởi số lượng User Agents không phổ biến hoặc địa chỉ IP đáng ngờ.
    apache-logs.PNG

  • Phát hiện các biến thể của WebShell phổ biến thông qua chữ kỹ
    Web shell rất dễ sửa đổi mà không mất chức năng và do đó có thể được tùy chỉnh để tránh các chữ ký cơ sở dữ liệu trong các phần mềm quét WebShell. Trong các trường hợp hiếm hoi, các WebShell thậm chí có thể chạy hoàn toàn trong bộ nhớ khiến cho việc phát hiện dựa trên tệp không thể thực hiện được. Tuy nhiên, những kẻ tấn công có thể thực hiện ít hoặc không sửa đổi các WebShell vì nhiều lý do. Trong những trường hợp này, có thể phát hiện các WebShell phổ biến bằng cách sử dụng các kỹ thuật khớp mẫu, chẳng hạn như các quy tắc YARA. Các quy tắc YARA có thể được nhập bởi nhiều loại sản phẩm bảo mật hoặc có thể được chạy bằng công cụ quét YARA độc lập.
    Các quy tắc YARA chứa nhiều chữ ký cho các WebShell thông thường và một số cách tiếp cận nâng cao để xác định các tạo biến thể được tìm thấy trong các WebShell. Hai bộ chữ ký được cung cấp, core (quy tắc cốt lõi được biên dịch) và extended (quy tắc mở rộng được biên dịch).
    + quy tắc core chỉ có thể xác định các WebShell phổ biến
    + quy tắc extended có thể phát hiện các WebShell phổ biến và các WebShell với các kỹ thuật thường được sử dụng để lẩn trốn các công dụ phát hiện WebShell, chẳng hạn như obfuscation và mã hóa.
    Các quy tắc YARA tải về theo link ở cuối bài viết.
  • Phát hiện WebShell thông qua những bất thường trong lưu lượng mạng
    Các WebShell có thể sử dụng mã hóa để lẩn tránh sự phát hiện của các phần mềm phát hiện. Bằng việc phân tích dữ liệu mạng, quản trị viên có thể phát hiện những bất thường trên WebSever của mình. Công cụ phổ biến được sử dụng là Snort. Các bạn có thể tải về chữ ký cho Snort để phát hiện các Webshell phổ biến ở cuối bài viết.
  • Phát hiện WebShell thông qua các thiết bị đầu cuối
    Các thiết bị Endpoint Detection and Response (EDR) có khả năng phát hiện WebShell dựa trên những lệnh gọi hệ thống và các xử lý bất thường trên hệ thống. Các sản phẩm bảo mật này giám sát từng quá trình trên điểm cuối bao gồm các cuộc gọi hệ thống được gọi. Web shell thường khiến quá trình máy chủ web sinh ra các hành vi bất thường. Ví dụ, hầu hết các máy chủ web thông thường đều không khởi chạy tiện ích ipconfig, nhưng đây là một câu lệnh phổ biến được kích hoạt bởi các WebShell. EDR và các giải pháp ghi nhật ký nâng cao sẽ có các khả năng khác nhau, vì vậy các quản trị viên được khuyến khích hiểu các giải pháp có sẵn cho môi trường của họ.
    Phát hiện WebShell trong Windows với Sysmon.
    System Monitor (Sysmon) là trình điều khiển thiết bị và dịch vụ hệ thống trong Windows, sau khi được cài đặt trên hệ thống, nó có thể theo dõi và ghi nhật ký hoạt động của hệ thống vào nhật ký sự kiện (event logs) của Windows. Nó cung cấp thông tin chi tiết về các tiến trình được tạo, kết nối mạng và thời gian tạo và thay đổi tệp. Bằng cách thu thập các sự kiện mà nó tạo ra bằng Windows Agent Collection hoặc các tác nhân SIEM và sau đó phân tích chúng, bạn có thể xác định hoạt động độc hại hoặc bất thường và hiểu cách kẻ xâm nhập và phần mềm độc hại hoạt động trên mạng của bạn.
    Truy vấn dưới đây sẽ báo cáo các tệp thực thi được khởi chạy bởi một quy trình máy chủ web IIS.
    Get-WinEvent -FilterHashtable @{logname="Micorosft-Windows-Sysmon/Operational";id=1;} | Where {$_.message -like "*ParentImage: C:\Windows\System32\inetsrv\w3wp.exe*"} | %{$_.properties[4]} | Sort-Object -Property value -Unique
    Các file có thể thực thi dưới đây thường được hacker sử dụng trong Webshell
    • arp.exe
    • at.exe
    • bitsadmin.exe
    • certutil.exe
    • cmd.exe
    • dsget.exe
    • dsquery.exe
    • find.exe
    • findstr.exe
    • fsutil.exe
    • hostname.exe
    • ipconfig.exe
    • nbstat.exe
    • net.exe
    • net1.exe
    • netdom.exe
    • netsh.exe
    • netstat.exe
    • nltest.exe
    • nslookup.exe
    • ntdsutil.exe
    • pathping.exe
    • ping.exe
    • powershell.exe
    • qprocess.exe
    • query.exe
    • qwinsta.exe
    • reg.exe
    • rundll32.exe
    • sc.exe
    • schtasks.exe
    • systeminfo.exe
    • tasklist.exe
    • tracert.exe
    • ver.exe
    • vssadmin.exe
    • wevtutil.exe
    • whoami.exe
    • wmic.exe
    • wusa.exe
    Phát hiện WebShell trong Linux với Auditd
    Auditd là một thành phần của hệ thống kiểm toán Linux (Linux Auditing System). Nó cung cấp cho người dùng cách một tiến trình tạo ra nhật kí (log). Auditd là một công cụ hữu ích để phát hiện WebShell và có sẵn trong rất nhiều bản phân phối Linux.
    Các lệnh dưới đây thường được sử dụng bởi hacker trong Webshell
    • cat
    • crontab
    • hostname
    • ifconfig
    • ip
    • iptables
    • ls
    • netstat
    • pwd
    • route
    • uname
    • whoami
Ngăn chặn WebShells

Các shell web hầu như luôn dựa vào việc sửa đổi các tệp ứng dụng web hiện có hoặc tạo các tệp mới trong một thư mục web có thể truy cập. Sử dụng hệ thống giám sát toàn vẹn tệp có thể chặn các thay đổi tệp trong một thư mục cụ thể hoặc cảnh báo khi có thay đổi. Các quy tắc McAfee Host Intrusion Prevention System (HIPS) cung cấp có thể tùy chỉnh cho một ứng dụng web cụ thể nhằm ngăn chặn các thay đổi hệ thống tệp mà các WebShell thường sử dụng. Các hệ thống giám sát tính toàn vẹn của tệp khác cũng có khả năng thực hiện việc ngăn chặn tương tự; quản trị viên nên tham khảo tài liệu hoặc tìm kiếm hướng dẫn của nhà cung cấp cho các sản phẩm của công ty đang sử dụng.

Tất cả các tệnh lệnh và quy tắc sử dụng trong bài viết này, các bạn tải về tại đây.
 
Thẻ
websecurity webshell
Bên trên