Tiếp nối bài viết trước, hôm nay chúng ta sẽ đi vào các phương pháp phát hiện powershell được NSA khuyến cáo.
Phương pháp 1: So sánh file, thư mục
Phương pháp hiệu quả nhất để phát hiện hầu hết các webshell là so sánh các tệp trên máy chủ web với một phiên bản gốc của ứng dụng đó. Quản trị viên có thể lập trình để so sánh thư mục web với phiên bản gốc để xác định các tệp được thêm hoặc thay đổi. Những tập tin sau đó có thể được xem xét thủ công để xác minh tính xác thực. NSA cung cấp 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.
1.1 Ứng dựng WinDiff:
Microsoft đã phát triển công cụ WinDiff cho phép so sánh tệp hoặc thư mục cho các tệp ASCII. Trong hầu hết các trường hợp, công cụ đơn giản nhưng mạnh mẽ này đủ để thực hiện so sánh file.
1.2 Sử dụng PowerShell:
PowerShell sẽ so sánh hai thư mục: thư mục gốc và thư mục của bạn. Kết quả sẽ đưa ra bất kỳ tệp mới hoặc sửa đổi nào trong phiên bản của bạn. Nếu một webshell nằm trong ứng dụng web, thì nó sẽ xuất hiện trên báo cáo này. Mỗi kết quả sẽ cần được xem xét để xác thực.
Yêu cầu
- PowerShell v2 trở lên.
- Có quyền truy cập thư mục gốc và thư mục cần so sánh.
Sử dụng
PS > .\dirChecker.ps1 -knownGood "<PATH>" -productionImage "<PATH>"
Ví dụ với IIS Website: PS > .\dirChecker.ps1 -knownGood .\knownGoodDir\ -productionImage "C:\inetpub\logs\"
1.3 Tiện ích Diff trên Linux
Sử dụng tiện ích diff được sử dụng so sánh file hoặc thư mục trên Linux
Yêu cầu:
- Máy chủ Linux cài sẵn “diff”
- Có quyền truy cập thư mục gốc và thư mục cần so sánh.
Sử dụng:
$ diff -r -q <known-good image> <production image>
Ví dụ với Apache website: $ diff -r -q /path/to/good/image/ /var/www/html/
Phương pháp 2: Phát hiện truy cập bất thường dựa vào log của máy chủ web
Việc phát hiện các webshell có thể khó khăn. Tuy nhiên, một số thuộc tính của shell rất khó ngụy trang hoặc thường bị kẻ tấn công bỏ qua và có thể hướng dẫn những người quản trị phát hiện ra webshell.
2.1 Sử dụng Splunk để truy vấn:
Việc sử dụng các câu truy vấn theo link sau trên Splunk có thể giúp xác định các URI được truy cập bởi người dùng, địa chỉ IP hoặc các Referer header bất thường. Kết quả trả về của các truy vấn này có thể bao gồm các URI an toàn. Tuy nhiên, nếu một webshell có mặt trên máy chủ, nó có thể được liệt kê trong số các kết quả được trả về.
2.2 Sử dụng PowerShell với máy chủ IIS:
Tập lệnh PowerShell được cung cấp theo link sau sẽ cố gắng xác định các điểm 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 tính toán các URI được máy chủ xử lý thành công (mã: 200-299) đã được yêu cầu bởi số lượng người dùng hoặc địa chỉ IP ít nhất. Phân tích này sẽ luôn tạo ra kết quả bất kể có webshell hay không. Quản trị viên phải xác minh độ tin cậy của các URI trong kết quả.
Yêu cầu:
- PowerShell v2 trở lên
- Chế độ được kích hoạt Full Language Mode
- Có quyền truy cập log IIS
Sử dụng:
PS > .\LogCheck.ps1 -logDir "<path to IIS log directory>"
Ví dụ: PS > .\LogCheck.ps1 -logDir "C:\inetpub\logs\"
Kết quả trả về có thể được chỉnh sửa với tùy chọn ‘-percentile N’. Mặc định, kết quả trả về các URIs dưới 5% cho các yêu cầu từ người dùng duy nhất và địa chỉ IP của máy khách.
2.3 Sử dụng Python script với máy chủ Apache:
Tương tự với phương pháp sử dụng PowerShell trên Windows. Máy chủ web trên nền tảng Linux sử dụng Python script được cung cấp ở link sau.
Yêu cầu:
- Python 3
- Quyền truy cập log Apache
Sử dụng:
$ LogCheck.py "<path to Apache log file>"
Phương pháp 3: Phát hiện các dấu hiệu của webshell phổ biến bằng YARA
Webshell 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 dấu hiệu phát hiện (signatures). Trong các trường hợp hiếm hoi, một số webshell thậm chí có thể chạy hoàn toàn trong bộ nhớ (nghĩa là thực thi không có tệp) 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ể 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 sử dụng 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. (link tải Yara)
Yêu cầu:
- Ứng dụng bảo mật tương thích với YARA hoặc công cụ YARA standalone (v3+)
- Quyền truy cập thư mục.
Sử dụng:
> .\yara64.exe -r -C <yara file> <path to web directory>
Ví dụ: > .\yara64.exe -r -C base.yara.bin C:\inetpub\wwwroot\
$ yara -r extended.yara.bin /var/www/html/
Phương pháp 4: Phát hiện dựa trên dấu hiệu mạng của một số webshell phổ biến
Webshell thường sử dụng mã hóa để tránh bị phát hiện bởi các mẫu dấu hiệu mạng. Các tham số của webshell rất dễ thay đổi từ đó tránh được các mẫu dấu hiệu được cập nhật liên tục từ các sản phẩm bảo mật. Tuy nhiên, với kiến trúc mạng cho phép kiểm tra TLS như reverse proxy hay tường lửa ứng dụng web WAF thì quản trị viên có thể phát hiện webshell chưa bị thay đổi hoặc thay đổi ít ở cấp độ mạng.
Các mẫu dấu hiệu Snort được cung cấp tại đây có thể được dùng để phát hiện một số webshell phổ biến.
Ví dụ sau là một mẫu dấu hiệu của Snort khi phát hiện lưu lượng mạng khả nghi:
alert tcp 192.168.1.0/24 [443,80] -> any any (msg: "potential unexpected web server"; sid 4000921)
Dấu hiệu này cảnh báo khi bất kỳ IP nào trong dải 192.168.1.0/24 phản hồi với yêu cầu HTTP(s). Với dải 192.168.1.0/24 là dải mạng khác với dải mạng máy chủ web.
Phương pháp 5: Endpoint Detection and Response (EDR)
Ngày này, người dùng cuối đã trở thành con đường phổ biến nhất để tội phạm mạng tấn công vào một mạng lưới của tổ chức. Endpoint Detection Response (EDR) được thiết kế để liên tục theo dõi và đối phó với các mối đe dọa. EDR có thể ghi lại và lưu trữ các truy vấn, hành vi và sự kiện trên các endpoint, cho phép quản trị viên phát hiện và điều tra các hoạt động đáng ngờ. Khi một cuộc tấn công được phát hiện, quản trị viên muốn biết nguyên nhân gốc rễ là gì và nó lây lan như thế nào – EDR là một công cụ hữu ích cho việc này. Ví dụ, hầu hết các máy chủ web an toàn đều không khởi chạy tiện ích ipconfig, nhưng đây là một kỹ thuật trinh sát phổ biến được kích hoạt bởi các webshell.
5.1 Sử dụng công cụ Sysmon trên Windows.
Sysmon là công cụ của Microsoft dùng để kiểm tra những hoạt động của Windows: process, network, file… và đưa vào windows event log. (link tải)
Log của Sysmon cho biết mỗi tiến trình được khởi tạo như thế nào. Điều này rất có ích trong phát hiện các hành vi bất thường của webshell.
Ví dụ với 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
Dưới đây là các tệp thực thi Windows thường được sử dụng bởi những kẻ tấn công và hiếm khi được khởi chạy bởi các ứng dụng IIS an toàn:
- 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
5.2 Sử dụng Auditd trên Linux
Auditd là một công cụ sẵn có trên hầu hết hệ điều hành Linux. Auditd có thể đưa ra thông tin về quá trình khởi tạo tiến trình.
Sử dụng:
+ Cài đặt: apt install auditd
+ Xác định uid của webserver: apachectl -s
/ ví dụ trả về: User: name=”www-data” id=33
+ Thay đổi auditd rule: nano /etc/audit/rules.d/audit.rules
–> -a always,exit -F arch=b32 -F uid=XX -S execve -k apacheexecve
-a always,exit -F arch=b64 -F uid=XX -S execve -k apacheexecve
Với XX = uid tìm được ở trên
+ Restart auditd: service audit restart
+ Xác định chương trình: cat /var/log/auditd/audit.* | grep “apacheexecve”
/type=SYSCALL msg=audit(1581519503.841:47): arch=c000003e syscall=59 success=yes exit=0 a0=563e412cbbd8 a1=563e412cbb60 a2=563e412cbb78 a3=7f065d5e5810 items=2 ppid=15483 pid=15484 auid=4294967295 uid=33 gid=33 euid=33 suid=33 fsuid=33 egid=33 sgid=33 fsgid=33 tty=(none) ses=4294967295 comm=”cat” exe=”/bin/cat” key=”apacheexecve”
+ Xác định chương trình có đáng tin cậy không.
+ Xem chi tiết: /var/log/auditd/audit.* | grep “exe=”/bin/cat”“
Dưới đây là một số chương trình ít khi được sử dụng bởi Apache:
- cat
- crontab
- hostname
- ifconfig
- ip
- iptables
- ls
- netstat
- pwd
- route
- uname
- whoami
Trên đây là một số phương pháp được Cơ quan An ninh quốc gia Hoa Kỳ (NSA) hướng dẫn để phát hiện webshell trên hệ thống của bạn. Hãy thực hiện các biện pháp này ngay hôm nay và để lại phản hồi cho chúng tôi trong trường hợp website của bạn bị tấn công, nghi ngờ nhiễm mã độc, webshell.