NullFang
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Xây dựng môi trường mô phỏng xử lý sự cố bảo mật sử dụng Wazuh, TheHive và SOAR ## Giới Thiệu Trong quá trình học tập, mình nhận ra rằng chỉ học lý thuyết hoặc làm các lab rời rạc vẫn chưa đủ để nắm vững quy trình phát hiện, phân tích và phản hồi sự cố trong thực tế. Vì vậy, mình quyết định tự xây dựng một mô hình lab SOC cá nhân mô phỏng môi trường thực tế nhằm thực hành toàn bộ vòng đời của một sự cố – từ lúc log được ghi nhận, cảnh báo được tạo, đến lúc case được mở, phân tích IOC và cuối cùng là tự động hóa phản ứng. ## Các Thành Phần Mô hình lab mình xây dựng bao gồm nhiều thành phần mã nguồn mở, phổ biến trong các tổ chức thực tế: * `Wazuh` được triển khai như một HIDS (Host-based Intrusion Detection System) để thu thập log từ các máy chủ và endpoint, đồng thời tạo ra cảnh báo dựa trên rule. * `TheHive` đóng vai trò như một nền tảng quản lý sự cố (incident response platform), nơi các cảnh báo từ Wazuh được chuyển thành case để analyst xử lý. * `VirusTotal` được sử dụng để thực hiện enrichment các IOC (như IP, hash, domain...) bằng cách quét và phân tích với hơn 70 công cụ antivirus và dịch vụ khác, giúp quá trình điều tra nhanh chóng và hiệu quả hơn. * `Shuffle`, một nền tảng SOAR (Security Orchestration, Automation, and Response), được mình sử dụng để xây dựng các playbook nhằm tự động hóa các hành động như gửi cảnh báo, update case trạng thái, hoặc phản ứng như block IP,… ## Kiến trúc hệ thống Sơ đồ dưới đây mô tả kiến trúc tổng thể của hệ thống. Các luồng xử lý bắt đầu từ việc Wazuh thu thập log, gửi cảnh báo đến TheHive, thực hiện enrichment IOC với VirusTotal, và phản hồi tự động thông qua Shuffle. ![image](https://hackmd.io/_uploads/SkKr3bKvgx.png) Sau khi nắm được sơ lược về kiến trúc thì mình sẽ xác định cách triển khai các thiết bị: * Wazuh Manager và TheHive mình sẽ sử dụng cloud của Digital Ocean để triển khai 2 máy này. * Máy SOC Analyst sẽ là máy chính của mình, Windows 10 mình sẽ thiết lập trên VMware. * Shuffle thì mình sử dụng nền tảng web. ## Cấu hình ### Wazuh Manager Trên Digital Ocean vào Create -> Droplet và tạo máy ảo sau khi xong thì sẽ được như sau: ![image](https://hackmd.io/_uploads/SJKFZ5Jdlg.png) Sau đó vào phần Networking để tạo Firewall, ở phần Inbound thì bạn nên để source là IP Public của bạn để có thể truy cập tới VM nhé. ![image](https://hackmd.io/_uploads/rJz0WqyOge.png) Các bước cơ bản đã xong thì mình sẽ tiến hành cài đặt Wazuh. Bạn có thể truy cập vào https://documentation.wazuh.com/current/quickstart.html để cài đặt. Đồng thời phải lưu ý là tùy vào lượng Agent mà bạn phải setup dụng lượng cho VM cụ thể như sau: ![image](https://hackmd.io/_uploads/rk4df51dge.png) Sau khi lệnh cài đặt đã chạy xong thì mình sẽ được Username và Password như sau: ![image](https://hackmd.io/_uploads/Byu1Q5yuel.png) Kiểm tra kết nối tới Wazuh Dashboard, trên Cloud bạn vào Droplet và copy ip public của VM Wazuh, tiếp đến vào Browser và nhập `http://ip_public`. ![image](https://hackmd.io/_uploads/S1XbVqkOel.png) Đến đây thì đã xong VM của Wazuh Manager. ### Kết nối Agent Vào phần Deloy Agent và nhập IP Public, Tên Agent của Wazuh Manager như sau: ![image](https://hackmd.io/_uploads/rkZsZCbugg.png) Kéo xuống dưới sẽ thấy hướng dẫn như sau, ta chỉ cần copy rồi chạy bên máy Agent ở Powershell dưới quyền admin là được: ![image](https://hackmd.io/_uploads/B1XWM0bOxl.png) Sau khi chạy mà có bị invalid thì bạn có thể khác phục bằng cách tìm mục server và tìm Wazuh rồi START nó thủ công nhé. ![image](https://hackmd.io/_uploads/Bkbs70Wdll.png) Cuối cùng lên Wazuh Dashboard và kiểm ra lại Agent đã được Active chưa. ![image](https://hackmd.io/_uploads/rkl-NRZdxg.png) Như thế này là được rồi :D, chúng ta sẽ đến với giai đoạn tiếp theo với TheHive. ### TheHive Tương tự Wazuh Manager, chúng ta phải tạo VM rồi add firewall sẽ được như sau: ![image](https://hackmd.io/_uploads/Sk2JwqJuxl.png) Về Cách cài đặt và cấu hình thì khá nhiều bước và dài mình để các từ bước mình làm ở đây [Github](https://github.com/nhatminhsc/SOC-Automation-Project?tab=readme-ov-file) và bạn có thể tham khảo thêm trên trang của [TheHive](https://docs.strangebee.com/thehive/installation/step-by-step-installation-guide/) nhé. Cuối cùng bạn truy cập TheHive, `http://ip_public:9000` như sau là được rồi nhé. ![image](https://hackmd.io/_uploads/BkhLr0-Ogl.png) ## Thiết lập và chỉnh sửa nguồn thập log ở Agent Ngoài các nguồn log như Security, Application, . . . thì ở project này mình sẽ lấy log thêm ở phần Sysmon. Trước tiên thì phải lấy địa chỉ log của Sysmon như sau: ![image](https://hackmd.io/_uploads/rk0DbyGdlx.png) Sau khi có được phần này ta sẽ ghi vào nó file ossec.conf để Wazuh Manager thu thập log ở Sysmon. ![image](https://hackmd.io/_uploads/HyxCZyfdgg.png) Sau đó thì nhớ phải restart lại Wazuh nhé. ![image](https://hackmd.io/_uploads/H1wNfyMuex.png) Sau khi đã chạy xong thì mình sẽ thử chạy mimikatz ở Agent và Dashboard có xem được log alert hay chưa ![image](https://hackmd.io/_uploads/SkEzHJMOll.png) Ở Dashboard thì chẳng thấy gì cả :'< ![image](https://hackmd.io/_uploads/rkaIGxMOgx.png) Ở đây thì việc mình lấy log ở Sysmon nhưng do chưa có rule cũng match với log mà Agent gửi lên Manager nên hiện thời vẫn chưa sinh ra được alert đó. Để có thể lấy được log chính xác và sinh ra alert thì mình phải đi qua từng giai đoạn gửi, match rule rồi sinh ra alert của Wazuh. Đầu tiền mình phải chỉnh file `/var/ossec/etc/ossec.conf` ở 2 lựa chọn này ở 2 mục `logall` thành `yes` (Mặc định là nó để `no` nha) ![image](https://hackmd.io/_uploads/ByYuQlf_xl.png) tại sao lại chỉnh thành `yes` như thế thì là đây ![image](https://hackmd.io/_uploads/SJ1z4gMdel.png) Việc này giúp cho những log chúng ta lấy dù chưa có rule để match nhưng vẫn được ghi lại chứ không bị bỏ qua. Và để có thể lấy được những log này lên được dashboard thì phải chỉnh `/etc/filebeat/filebeat.yml` ở mục `archives` thành true nữa. ![image](https://hackmd.io/_uploads/HJapNxfdel.png) > Và nhớ restart cho bất kỳ sự chỉnh sửa ở dịch vụ nào nhé. Sau đó lên Dashboard và check lại, nhận được như này thì đã lấy được log thành công. ![image](https://hackmd.io/_uploads/B17FBlMOxg.png) Khi mở ra xem kỹ hơn thì mình sẽ nhắm vào field này để viết rule ở mục sau: ![image](https://hackmd.io/_uploads/BJTCz-fOxx.png) à và đừng quên tạo Indext pattern trước rồi hả tìm kiếm nha. ![image](https://hackmd.io/_uploads/SyMA8lG_xx.png) ## Viết Rule cho Mimikatz Trước tiên thì mình sẽ tham khảo các rule có sẵn của Wazuh về Sysmon rồi mình sẽ custom lại từ nó :>>> Bắt đầu mình sẽ viết 1 rule về việc chạy tiến trình mới nên mình sẽ tìm và xem qua các rule sysmon event 1. ![image](https://hackmd.io/_uploads/rk2Mtgz_el.png) Đây rồi, giờ thì mò mẫn rồi custom lại thoi :v Copy đoạn rule đó rồi qua file custom rule để thiết lập riêng với các rule có sẵn nhé, ngoài ra thì rule mình set thì sẽ có id > 100000. Sau nhiều lần thử thì mình sẽ viết thế này ![image](https://hackmd.io/_uploads/By4oxWzOel.png) Để kiểm tra field mình sử dụng ở rule có hoạt động đúng không thì mình sẽ thay đổi cả tên của mimikatz để thử: ![image](https://hackmd.io/_uploads/H1L-2xzugg.png) Sau đó mình sẽ chạy file `FindMe` này ![image](https://hackmd.io/_uploads/SkA7neG_ll.png) Sau đó lên Dashboard để kiếm tra thành quả :))) ![image](https://hackmd.io/_uploads/SkekWWMuge.png) tuyệt vời !!!, ngoài ra bạn có thể tham khảo thêm về `syntax` của rule ở [đây](https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html) ## Thiếp lập Shuffle Vào Web của Shuffle và đăng ký tài khoản, sau đó bạn kéo 1 webhook và đặt trên cho nó, rồi qua `Change_Me` để add thêm biến $exec thì được như sau: ![image](https://hackmd.io/_uploads/B1XFOCEdgx.png) Sau đó, các bạn có thể vào `/var/ossec/etc/ossec.conf` hoặc có thể cấu hình qua Wazuh Dashboard, mình thì hay sửa file cấu hình ở trên Dashboard, trước khi lưu thì nó sẽ check file có hợp lệ hay không rồi mới được phép lưu, giúp mình tránh được các cái sai không đáng có :>>> Dưới đây là đoạn mình cấu hình để tích hợp gửi các Alert qua cho webhook trên shuffle ``` <integration> <name>shuffle</name> <hook_url>https://shuffler.io/api/v1/hooks/webhook_4f294a44-73c4-42de-ba09-e6574522f120</hook_url> <rule_id>100002</rule_id> <alert_format>json</alert_format> </integration> ``` ![image](https://hackmd.io/_uploads/BJAQDJr_gg.png) Bạn có thể tham khảo thêm hoặc tùy biến ở [đây](https://wazuh.com/blog/integrating-wazuh-with-shuffle/) nhé Vì shuffle đã có đoạn script để wazuh gửi dữ liệu sẵn ở `/var/ossec/integrations/` nên bạn chỉ cần khai báo thêm `integration` ở `ossec.conf` là được rồi nhé ![image](https://hackmd.io/_uploads/HkR9DkHuee.png) Sau đó bạn vào Agent để chạy mimikatz để test xem đã gửi alert lên webhook thành công chưa: ![image](https://hackmd.io/_uploads/Sk8BF0Ndlg.png) Bạn nhận được như thế này là Webhook đã hoạt động đúng rồi nhé. ![image](https://hackmd.io/_uploads/r1eWwJHulx.png) ## Workflow về quy trình xử lý cảnh báo bảo mật tự động Sau khi nhận được Alert qua Webhook rồi thì mình sẽ xây dựng Workflow về cảnh báo tự động như sau: 1. Nhận cảnh báo: Hệ thống phát hiện Mimikatz và gửi alert sang Shuffle. 2. Xử lý ban đầu: Shuffle nhận alert, trích xuất SHA256 hash từ file bị nghi ngờ. 3. Phân tích: Gửi hash lên VirusTotal để kiểm tra mức độ uy tín. 4. Tạo hồ sơ điều tra: Gửi thông tin sang TheHive để tạo alert cho SOC. 5. Thông báo nhân sự: Gửi email cho SOC analyst để bắt đầu điều tra. ### Thiết lập Regex nhận hash từ alert Đổi `find Actions` trên shuffle của Chang Me thành `Regex capture group`, mình có ý định là sẽ lấy phần hash của alert đó ra để enrichment nên sẽ lấy field của hash và thêm 1 regex phù hợp. ![image](https://hackmd.io/_uploads/SJeU1xB_xl.png) Sau khi thiết lập xong thì bạn bấm vào cái nút kế bên chữ `Detail` y như hình bên dưới để áp dụng thử Action đã thay đổi. ![image](https://hackmd.io/_uploads/Bk1Vllrdex.png) Khi `Change_Me` bắt được dữ liệu như này, là hash256 của alert thì bạn đã thành công rồi. ![image](https://hackmd.io/_uploads/HyvdgxSugg.png) ### Enrichment với VirusTotal Để enrichment thì mình sẽ dùng VirusTotal như sau, `Find action` ở dạng `Get a hash report`, còn Apikey thì bạn qua VirusTotal lấy nhé, id thì bạn chọn cái regex. ![image](https://hackmd.io/_uploads/Hy5lUxr_xl.png) Bạn tiến hành chạy lại và nhận được các thông tin như sau thì là thành công. ![image](https://hackmd.io/_uploads/HklKIxB_xl.png) Trong mớ nội dung đó bạn sẽ thấy cái field như sau: ![image](https://hackmd.io/_uploads/r1xnwlBugl.png) `Malicious: 66` Đây chính là nó !!!! ![image](https://hackmd.io/_uploads/HkWXuxSdgg.png) ### Thiết lập TheHive tạo Case với Alert từ Shuffle Tạo Organisation trong TheHive ![image](https://hackmd.io/_uploads/B1Owk-Bdxx.png) Tạo User trong TheHive ![image](https://hackmd.io/_uploads/Hyo2JbHdxx.png) Tương tự với User tiếp theo nhưng chọn `Type: service` nhé, tổng sẽ được 2 user như sau: ![image](https://hackmd.io/_uploads/Skh_WbSdel.png) * `User: SOAR` sẽ đảm nhận việc trigger các alert được gửi từ Shuffle. * `User: user1` sẽ đảm nhận việc của SOC analyst. Ở người dùng SOAR này mình sẽ tạo API key ![image](https://hackmd.io/_uploads/BkEtb-Sueg.png) TheHive trên Shuffle thì thiết lập như sau nhé: ![image](https://hackmd.io/_uploads/rkfqWWruex.png) `API key` là của User SOAR của TheHive còn, URL là `ip_public` của TheHive và `port` Còn dưới đây là nội dung mình đã thiết lập cho `tab simple` để gửi các thông tin được chỉ định ở các field qua TheHive để tạo Case. ``` Title: $exec.title Tags: ["T1003"] Summary: Mimikatz activity detection on host: $exec.text.win.system.computer and the process ID is: $exec.text.win.eventdata.processId and the command line is: $exec.text.win.eventdata.commandLine Severity: 2 Type: Internal Tlp: 2 Status: New Sourceref: "Rule: 100002" Source: Wazuh Pap: 2 Decription: Mimikatz Detected on host: $exec.text.win.system.computer from user: $exec.text.win.eventdata.user ``` Run Execution để thử xem có được không nhé ![image](https://hackmd.io/_uploads/ryeUvGHdex.png) Boommmmmm, nó bị lỗi rồi, và nó làm mình mất nhiều giờ mà cũng không fix được :))), mình thất bại thật rồi. Nhưng không sao, `tab simple` không được thì mình sẽ thử qua `tab advance` coi sao, và bất ngờ là nó thành công. (biết thế qua đây làm sớm hơn :=)) ![image](https://hackmd.io/_uploads/SJBzczSOxx.png) Mình sẽ điền phần nội dung dưới định dạng JSON như sau: ``` { "description": "Mimikatz Detected on host: $exec.text.win.system.computer from user: $exec.text.win.eventdata.user", "externallink": "", "pap": 2, "severity": 2, "source": "Wazuh", "sourceRef": "Rule: 100002", "status": "New", "summary": "Mimikatz activity detection on host: $exec.text.win.system.computer and the process ID is: $exec.text.win.eventdata.processId and the command line is: $exec.text.win.eventdata.commandLine", "tags": ["T1003"], "title": "$exec.title", "tlp": 2, "type": "Internal" } ``` Cách mà mình viết được đoạn JSON là mở đoạn lỗi khi nãy, sẽ có phần body chưa nội dung JSON mà mình gửi qua TheHive rồi mình set lại các value bằng các field để nó truyền giá trị vào. (tiện ghê đỡ phải viết lại từ đầu :>, đôi khi thấy gặp lỗi cũng giúp mình mò được nhiều thứ hơn) ![image](https://hackmd.io/_uploads/r1_fozrulx.png) Và cuối cùng là bên TheHive cũng đã nhận được alert với nội dung như sau: ![image](https://hackmd.io/_uploads/r1SPiGr_xe.png) Tuyệt vời !!!, đã tạo được case từ cảnh báo của Wazuh. ### Thiết lập gửi cảnh báo qua Email Vào Shuffle và chọn phần app và nối nhưng trong ảnh dưới đây. ![image](https://hackmd.io/_uploads/BJEwvCSOlg.png) Sau đó ta sẽ cấu hình vài thứ ở Email: ``` Find Action: Send email shuffle Recipients: <your_email_address> subject: Mimikatz Detected !!! Body: $exec.text.win.eventdata.utcTime Title: $exec.title Host: $exec.text.win.system.computer ``` Và Run Execution để chạy flow và kiểm tra email thoi :> ![image](https://hackmd.io/_uploads/BkJrd0Hdxx.png) Thành công rồi !!! Tới đây thì Workflow của giai đoạn về việc tự động hóa cảnh báo khi có alert từ Wazuh, tạo Case qua TheHive và gửi cảnh báo qua email cũng đã hoàn thành. ## WorkFlow phản ứng với SSH attack ### Kết nối Agent Ubuntu Đầu tiên bắt đầu từ việc tạo Agent ubuntu thoai. Chọn hệ điều hành, nhập IP Wazuh Manager, tên Agent ![image](https://hackmd.io/_uploads/rkMmqeq_lx.png) Giờ thì chỉ cần copy lệnh và paste vào máy ubuntu. ![image](https://hackmd.io/_uploads/SJtF9e5dee.png) Sau đó, Vào mục Overview nếu thấy Agent được `Active` thế này thì thêm Agent thành công. ![image](https://hackmd.io/_uploads/SJSRclqOge.png) Tiếp theo, cài đặt SSH trên máy Ubuntu sẽ được sử dụng làm mục tiêu cho cuộc tấn công SSH. ``` sudo apt update sudo apt install openssh-server -y sudo systemctl start ssh sudo systemctl enable ssh sudo systemctl status ssh ``` ![image](https://hackmd.io/_uploads/By-0ix9Oxx.png) Mình sẽ tiến hành tấn công SSH từ 1 máy khác với công cụ là hydra với câu lệnh như sau: ``` hydra -L users.txt -P passwords.txt ssh://<ip_target> ``` > Có thể cài hydra qua lệnh sau: > sudo apt update && sudo apt install -y hydra ### Viết Rules cho Brute-force SSH Đây là quá trình hydra thực hiện brute force ![image](https://hackmd.io/_uploads/SJNP0e5uge.png) Bây giờ chúng ta sẽ thử lên Dashboard xem đã có thể detected được Alert hay chưa ở `Threat Intelligence -> Threat Hunting` ![image](https://hackmd.io/_uploads/ByqW1-cdlg.png) Dễ thấy các Alert đang được để ở mức cảnh báo là 5, để nhấn mạnh vào sự kiện này ta sẽ tạo một rule để kích hoạt cảnh báo khi sự kiện Level 5 “sshd: Attempt to login using a non-existent user” xảy ra hơn ba lần trong vòng 60 giây, cho thấy đang có một cuộc tấn công brute-force SSH diễn ra. Vào `Server Management ->Rules -> custom rules` ![image](https://hackmd.io/_uploads/HytgXbcugl.png) ``` <rule id="5764" level="10" frequency="3" timeframe="60"> <if_matched_sid>5710</if_matched_sid> <same_source_ip /> <description>Multiple SSH login attempts using non-existent usernames.</description> <mitre> <id>T1110</id> </mitre> </rule> ``` Đây là rules mới với ý nghĩa như sau: * `rule id` : id mới cho rule * `level` : mức level * `frequency` : Rule sẽ kích hoạt nếu điều kiện xảy ra tối thiểu 3 lần * `timeframe`: trong vòng 60 giây * `if_matched_sid`: chỉ kích hoạt nếu rule 5710 xuất hiện * `<same_source_ip />` : Chỉ tính các sự kiện đến từ cùng một địa chỉ IP nguồn. * `description`: mô tả * `MITRE ATT&CK ID T1110 (Bruce force)`: giúp mapping với kỹ thuật tấn công trong mitre Framework Ngoài ra thì cách mà mình viết được rules này thì mình tham khảo các rules mặc định khác, rồi biến tấu thêm bằng cách xem trong `Syntax Rules` của Wazuh có option nào thích hợp rồi mình thử và thử thoai :=)) ![image](https://hackmd.io/_uploads/B1KHqZcdeg.png) ![image](https://hackmd.io/_uploads/B1iYqW9dge.png) Còn các option trong Rules thì bạn có thể xem ở [đây](https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html) Sau khi đã lưu cấu hình Rules mà bạn muốn xong thì phải tiến hành reset lại Wazuh Manager nhé. Xong rồi thì mình thử attack lại xem rule đã trigger được chưa. ![image](https://hackmd.io/_uploads/HyfnsZq_gl.png) Đã xuất hiện, như thế là rules đã hoạt động đúng nhé. ### Thiết lập shuffle thiết lập webhook nhận alert từ Wazuh. ![image](https://hackmd.io/_uploads/rkEl6b9Oxg.png) Bạn copy dòng Webhook url ở đây để tích hợp nó vào Wazuh để gửi Alert lên webhook nhé. ![image](https://hackmd.io/_uploads/rJmG6-5_gg.png) Sau đó vào `Server management -> settings -> edit configuration` để tích hợp shuffle nhé. ![image](https://hackmd.io/_uploads/rkmZkzc_xe.png) Sau đó bạn click vào webhook và nhấn `start` và run execution. Nếu bạn nhận được các thông tin như này thì đã hoạt động rồi nhé. ![image](https://hackmd.io/_uploads/ryF-JG9_el.png) Sau đó thì mình sẽ lọc cái IoC cần thiết để gửi cho VirusTotal, xem qua nội dung thì mình thấy được các thông tin sau: ![image](https://hackmd.io/_uploads/B1Ayxf5dee.png) Vì đây là `Brute force attack` nên mình sẽ lấy `IoC` là `IP` cụ thể là ở phần `data.srcip` như trong hình, đó là ip đã thực hiện hành vi brute force. ![image](https://hackmd.io/_uploads/HyEIgzquxl.png) ### Thiết lập VirusTotal Sau đó ở VirusTotal, mình sẽ lấy thông tin từ `src_ip` như sau: ![image](https://hackmd.io/_uploads/HkTiMG5uee.png) Ở chổ `Find Actions` phải đổi qua `Get an ip address report` nhé. Sau đó lưu và Run workflow lại thoi. ![image](https://hackmd.io/_uploads/HyL4QMq_xe.png) xem kỹ hơn về nội dung của VirusTotal thì sẽ thấy nội dung: ![image](https://hackmd.io/_uploads/Skytmfcdge.png) Vì đó là ip nội bộ của mình nên VirusTotal phân loại nó là độc hại. Trước khi đi tới phần `block IP` thì mình sẽ nói ngắn gọn qua `Active-reponse` ở Wazuh. 1. Wazuh Active Response cho phép tự động phản ứng với mối đe dọa bằng cách chạy sẵn script hoặc lệnh, thường dùng để chặn IP độc hại nhằm bảo vệ hệ thống. 2. Active Response là tính năng của Wazuh cho phép tự động thực hiện hành động (như chặn IP, dừng tiến trình) khi phát hiện mối đe dọa. Ví dụ: * Chặn IP sau nhiều lần đăng nhập SSH thất bại. * Chặn IP sau khi phát hiện quét cổng. Sau đây thì mình sẽ đi phần cài đặt như sau: ![image](https://hackmd.io/_uploads/rJE_UM5uxl.png) ``` <active-response> <command>firewall-drop</command> <location>local</location> <rules_id>5764</rules_id> <timeout>no</timeout> </active-response> ``` * `firewall-drop`: Lệnh sẽ thực thi script để chặn địa chỉ IP. * `rules_id`: Xác định các ID rule sẽ kích hoạt Active Response. * `local`: Chỉ định lệnh sẽ chạy trên chính agent nơi phát hiện mối đe dọa. * `no`: Chỉ định việc chặn sẽ duy trì vô thời hạn và cần can thiệp thủ công để gỡ bỏ. Chúng ta cần chỉ định hành động cần thực hiện khi phát hiện mối đe dọa. Wazuh đã cung cấp các tập lệnh mặc định, như `firewall-drop`, sử dụng tường lửa của hệ thống để chặn IP. Các bạn có thể tìm thấy nó ở `/var/ossec/active-response/bin/` ![image](https://hackmd.io/_uploads/HyJUYzcOee.png) Cách mà Active-reponse hoạt động như sau: Trong file cấu hình của Wazuh Manager, phần Active Response sẽ khai báo lệnh (command) và các rule ID tương ứng. Khi hệ thống phát hiện một alert có rule ID trùng với cấu hình trong Active Response, Wazuh Manager sẽ gửi lệnh tới Agent. Agent sẽ thực thi script firewall-drop trên chính máy của nó để chặn IP nguồn gây ra sự kiện. Bên cạnh đó, ta còn có `agent_control` là công cụ của Wazuh dùng để quản lý và giám sát agent từ Manager, cho phép liệt kê, khởi động lại, xóa và kiểm tra trạng thái agent. Ngoài ra, tiện ích `agent_control` của Wazuh có thể được sử dụng để chặn thủ công các địa chỉ IP cụ thể trên các điểm cuối được giám sát của bạn. ![image](https://hackmd.io/_uploads/BJbs3G5dgg.png) Lệnh: `./agent_control -L` Lệnh này sẽ hiển thị tất cả các active-reponse đã được cấu hình, cho phép chúng ta chọn phản hồi phù hợp để chặn địa chỉ IP. <!-- Bây giờ chúng ta sẽ thử block thủ công bằng `agent_control`, cụ thể là sẽ chặn không cho `Agent_Ubuntu` tới 8.8.8.8 của google Mà trước đó thì ta phải chắc là ubuntu của mình có thể ping tới 8.8.8.8. ![image](https://hackmd.io/_uploads/HJB5xQqulx.png) Bây giờ ta sẽ chạy active reponse command như sau: ```./agent_control -b 8.8.8.8 -f firewall-drop0 -u 002``` ![image](https://hackmd.io/_uploads/r1lsWm5dll.png) * `-b 8.8.8.8`: Specifies the IP address to be targeted by the active response * `-f firewall-drop0`: Indicates the active response command to execute. firewall-drop is a standard script in Wazuh designed to block IP addresses using the system's firewall * `-u 002`: Identifies the agent by its unique ID (002) on which the active response should be executed. Tiếp đến, ta thử ping ở trên máy ubuntu. ![image](https://hackmd.io/_uploads/Hk3GX79dxg.png) Đã bị chặn rồi nhé. Ta cũng có thể xem log của Active-reponse ở `/var/ossec/logs/active-responses.log ` ![image](https://hackmd.io/_uploads/B1k6mQcOlg.png) --> ### Thiết lập lấy API KEY cho Wazuh Bây giờ sẽ tới phần quan trọng nhất là thực hiện trên Shuffle Tuy nhiên, để có được API JWT, bạn cần phải có thông tin xác thực cần thiết. Ở đây, bạn có thể dụng lệnh: `tar -xvf wazuh-install-files.tar` ![image](https://hackmd.io/_uploads/rylhNmcuxe.png) Sau đó vào `wazuh-install-files` và lấy thông tin xác thực ở file `wazuh-password.txt` ![image](https://hackmd.io/_uploads/HynWrX5uel.png) Sau đó mình sẽ điền user và password vào câu lệnh sau: ``` curl -u username:password -k -X GET "https://192.168.204.150:55000/security/user/authenticate?raw=true" ``` Sau đó, mình lên Shuffle và dùng app http và thiết lập như sau: ![image](https://hackmd.io/_uploads/B1jrImcdlg.png) Tiếp đến ta sẽ nối thêm với app của Wazuh và cấu hình như sau: ![image](https://hackmd.io/_uploads/rywjFQquel.png) ![image](https://hackmd.io/_uploads/BJ48qXqdxg.png) ![image](https://hackmd.io/_uploads/Synt97c_lx.png) Sau khi thiết lập xong thì ta sẽ Save và execute workflow 1 lần nữa kiểm tra. ![image](https://hackmd.io/_uploads/H1VNjX9dlx.png) Được rồi, bây giờ ta sẽ kiểm tra xem máy ubuntu có thể ping tới 8.8.8.8 được nữa không. ![image](https://hackmd.io/_uploads/rk5GpXcOlx.png) Như vậy là workflow của chúng ta đang thực hiện đúng ### Thiết lập lựa chọn cho SOC analyst Tiếp đến ta sẽ thêm lựa chọn của SOC analyst để lựa chọn có Block IP hay không. ![image](https://hackmd.io/_uploads/HJlNRm9dee.png) và phần data ở wazuh sẽ sửa lại là IP đã thực hiện hành vi Brute-force ![image](https://hackmd.io/_uploads/BkweG4c_le.png) Sau đó chúng ta run lại workflow, bạn có thể thấy ở User Input thì sẽ thấy trạng thái là `WAITING` ![image](https://hackmd.io/_uploads/SysD1N9_ee.png) song song thì địa chỉ Email bạn điền vào sẽ nhận được thông báo như sau: ![image](https://hackmd.io/_uploads/Bk6s1Ncugg.png) Nhấn vào lựa chọn `TRUE` thì bạn sẽ được dẫn tới trang này. ![image](https://hackmd.io/_uploads/r1g6x4qugg.png) Sau khi ấn nút `Continue` mình sẽ vào máy tấn công để ping thử. ![image](https://hackmd.io/_uploads/ByYU9E5dxg.png) trên máy `Agen_ubuntu` ![image](https://hackmd.io/_uploads/rkpo945Ogx.png) Như này thì đã chặn thành công. ### Thiết lập TheHive Sau cùng thì ta sẽ tích hợp thêm TheHive để tạo Case cho Alert về SSH. ![image](https://hackmd.io/_uploads/SkQf3Vq_le.png) Thiết lập trên TheHive như sau: ``` { "description": "Multiple SSH login attempts using non-existent usernames.", "externallink": "", "pap": 2, "severity": 2, "source": "Wazuh", "sourceRef": "Rule: 5764", "status": "New", "summary": "Multiple SSH login attempts using non-existent usernames on host: $exec.all_fields.agent.name from source IP: $exec.all_fields.data.srcip", "tags": ["T1110"], "title": "$exec.title", "tlp": 2, "type": "Internal" } ``` Cuối cùng thông tin nhận được bên TheHive ![image](https://hackmd.io/_uploads/r11YCE9Oxg.png) ![image](https://hackmd.io/_uploads/Sy0dMHc_el.png) ## Tổng kết Qua quá trình triển khai và thực hiện lab, mình đã xây dựng thành công một môi trường SOC mô phỏng, tích hợp Wazuh, TheHive, VirusTotal và Shuffle SOAR để phát hiện, phân tích, và phản ứng tự động trước các mối đe dọa như Mimikatz và SSH brute-force. Lab đã giúp mình: * Hiểu rõ kiến trúc và luồng dữ liệu từ thu thập log, phân tích rule, đến phản hồi sự cố. * Thực hành viết custom rules trong Wazuh để nâng cao khả năng phát hiện. * Sử dụng Shuffle để tự động hóa enrichment, tạo case, gửi email và kích hoạt Active Response. * Áp dụng Active Response để chặn IP độc hại trực tiếp từ agent. Mô hình này tuy còn đơn giản so với hệ thống SOC thực tế, nhưng hoàn toàn có thể mở rộng thêm các nguồn log, tích hợp thêm công cụ threat intel khác, hoặc bổ sung các kịch bản phản ứng phức tạp hơn. Đây là nền tảng vững chắc để phát triển kỹ năng vận hành và tự động hóa SOC trong môi trường thực tế. ## References [TheHive Document](https://docs.strangebee.com/thehive/installation/step-by-step-installation-guide/#thehive-installation-and-configuration) [Wazuh Document](https://documentation.wazuh.com/current/index.html) [My GitHub](https://github.com/nhatminhsc/SOC-Automation-Project?tab=readme-ov-file) [Syntax Rules in Wazuh](https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html) [Wazuh API](https://documentation.wazuh.com/current/user-manual/api/reference.html#tag/Active-response/operation/api.controllers.active_response_controller.run_command)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully