【競賽心得】RedAlert 初賽紀錄

RedAlert 初賽告一段落,分享一下解題、防禦心得

PWN 題

雖然說取名 PWN 題,但跟漏洞一點關係都沒有!!!

  • 日誌分析
    ------ 被秒解掉了 --------

  • 惡意程式分析 - 找出惡意程式的 CVE 編號

    給了一隻惡意程式,丟 VT 看看,有掃過的報告 :

    https://www.virustotal.com/gui/file/81dddd58dcef073ef423962d6dc18fbf76a328838800310427f81016ac1dc755/detection

    直接 GET CVE編號 CVE-2017-11882

  • 流量分析 - 找出流量中的 FLAG

    一開始題目格式還給錯,最後指令 grep "Red_Alert_DOS*" 就有 FLAG : Red_Alert_DOS_def08e549e3a54be252878e6e085302c

  • VM 分析 - 找出惡意程式 & FLAG 跟中繼站有關係

    題目給了一個VM ,裡面環境很亂,發現有個 Notpad++執行中,立馬認為是惡意程式
    跑一下看流量看到中繼站在 172.16.67.250
    於是連線到 80 看果然有 Web Server
    最後通靈 http://172.16.67.250/flag.txt 得到 FLAG : Red_Alert_72_a743cca38f00eb008108bf76aed1e21b

  • 承襲上題VM,找出藏在VM的 FLAG

    打開搜尋....通靈! FLAG: Red_Alert_72_228f9880186cb1b17578b91c64debd2b
    PS. 原本好像用 r77 Rootkit 隱藏,但是被系統 index 了 (笑

  • 承襲第四題 VM,找出VM密碼

    這題隊友在第四題就在VM上跑過 mimikatz 找到密碼,所以一分鐘內就搞定了

主機防禦賽

攻防賽是這次比賽得重點,分數占了 80% 以上,給了 CDX 看自己手上的機器,

  • Windows 主機
    主機是主辦用 Metasploitable v3 的 2008 SP1 主機架設的 (誰會在公司環境用這個架設啦 !
    上面只有拔掉了幾個原本的服務,大概有以下幾個服務

    • Jenkins
    • HFS
    • IIS (主要保護的服務)
    • SMB
    • RDP

    拿到主機後,一進去就是先 Ban 使用者、改密碼

    由於主機很老舊,SMB、RDP 又有高危險漏洞可以打,我們接著上微軟官方的 Patch,但 RDP 還是依然被打到藍屏,看錯誤訊息應該是被 Blue Keeper 打到 DoS 沒錯,最後先暫時換 Port 躲一陣子

    除了一直被紅隊戳之外,因為一開始隊賽制不熟悉,不清楚到底要留下什麼服務,也不敢冒然關閉現有的服務,怕影響分數,於是我們隊伍幾乎朝著更新已知服務的方向做事
    直到失去了將近十萬分才意識到我們是不是必須將自己的FLAG放上網站才能通過主辦方的 Service Check...... (最早我們只有把 hack by redteam 刪除而已 QAQ

    Jenkins 的部分,由於版本超級老舊,我們選擇先暫時停止這個服務,不過到最後發現也不會影響分數

    HFS 檔案伺服器,我們知道有RCE漏洞,於是換上新版本上線繼續服務,但最後不影響分數,就全關閉了

    IIS 伺服器,他開了 HTTP & FTP ,主要設定了連線 Session 數以及拔除 FTP 寫入檔案的權限,FTP 最後也關了,因為 Service Check 不檢查它

    除此之外,系統上被放了不少後門跟熟悉的孩子r77 Rootkit,最後上 PCHunter 把可疑的東西全砍了

    隊友們的部分,也先幫忙上了 Carbon Black、Trapes EDR 來監控...but...這主機 IO效能差到一個極點,效能一直被他們吃掉不能做事情,甚至連 WireShark、ThreatThonar 執行都被他們擋下來
    於是....手動又將他們移除了

    這階段是我們失分最多的地方,沒搞清楚賽制讓我們失去大量的分數、還沒摸清模糊地帶的遊戲規則,導致不敢亂關服務而是上補丁 ( 如果當時砍到只剩下 HTTP 或許可以減少很多時間跟雜事

  • Linux 主機

    由於 Windows 這台讓我們大失血,主機開放前我們討論了各自的分工已經寫好各種指令、腳本來防禦主機

    這台 Linux 主機跑了 Moodle 3.1.4 的網頁、ProFTP 1.3.5

    拿到主機後,起手式檢查帳號、新增各自的帳號以及 將SSH 換 PORT,並打包當下的一些LOG檔案回來分析

    接著服務的部分,由於 ProFTP 1.3.5 也有 RCE ,而且確定不影響分數就先關閉了。Moodle 的部分,版本老舊,我們先上了幾個 Patch 並在 /admin/admin.php 找到一個 WebShell,將其移除。
    我們也發現 Service Check 根本不檢查網頁的可用性,所以最後我們選擇直接拔除登入功能!

    這台主機直到中午之前,幾乎沒有失分過,除了因為改設定沒改好失分之外,算是很平穩保持不失分狀態

    但是一到中午就發現詭異的狀況,原本含有隊伍FLAG的index.php被刪除,被換上 hacked by redteam 的字樣,發現後第一時間我們將檔案換回去,但還是少了幾千分...

    這個行為當天沒有找出原因,而且在下午的時候,FLAG 的字母被偷偷換掉 1 個字,最後決定先寫個程式每秒拉正確的檔案覆蓋 、更新 Kernel 版本
    之後就穩定不失分了,但前面被入侵的原因當天還是沒找到

  • Linux Bonus 主機

    第二天晚上,主辦突然公告半夜有新主機題目...(眼神死)

    於是開始猜題,有趣的是,我們一直有在掃描攻擊者網段確認有多少紅隊的主機或是測試主機,第二天白天其時就有發現了 172.16.201.、172.16.202. 有很多台碰的到的主機

    除了攻擊者的 Metasploit 攻擊主機之外,還發現了不少題目機,我們猜是測試題目用的,雖然很想打進去,但還是要遵守規則的,不要攻擊主辦方XD。而且確認過,有其他隊伍也碰的到那些主機.....所以理論上可以透過他們橫向滲透到其他隊伍變成打 Attack&Defence,雖然手癢,但還是乖乖的沒亂搞

    我們也晚上也因為掃到一台沒見過的 Linux 機器在猜說是不是 Linux 環境,結果真的是呢 > <

    公告說半夜會上一台隱藏的主機,原先以為不會出現在 CDX 上,也持續的詢問主辦何時會開放,但當下都沒有給答覆

    因此我們持續監控著隊伍網段下一個 IP 是否有主機上線,沒想到果然在下一個連號的 IP 有主機上線了

    我們整隊馬上就登上去重複做了跟第二台一樣的事情,刪除帳號、保存 LOG、改網站伺服器 FLAG

    在這台主機上,發現了比較奇怪的行為,iptable 一直被反安裝,apt 對外安裝也怪怪的,一怒之下,隊友直接把 apt 改成 apt-gaga 然後寫了一個 log 輸入指令的程式命名為 apt 發現有東西在移除我們的 iptable, 最後發現是 crontab 有異常的排程腳本被執行

    主機上主要跑了 nginx 和 apache,兩者根目錄在同一個地方,只是監聽的 PORT 不同

    網站伺服器的 access.log 中可以看到主辦方佈署環境的過程,發現有個 /ggininder.hpp 被拿來用,但在根目錄下我們並沒有找到這檔案,實際上測試 nginx、apache 卻會正常找到這個檔案執行。

    我們確認了一些常用的隱藏檔案手法,但沒有結果,透過 strace 去 cat /var/html/www/ggininder.php 發現程式很正常的就進入 system call 讀取檔案內容回來,因此開始往 kernel module 的 rootkit 方向去尋找原因

    最後在 /lib/modules/4.13.0-45-generic/kernel/drivers/PulseAudio/ 這個資料夾的時間有鬼,也發現到 kernel 會讀取目錄下 ggininder/ggininder.ko,但 ls 也是一樣看不到東西

    最後馬上升級 kernel 版本重開機順利將後門移除,所有隱藏檔案就正常顯示了

    該 kernel module 是開源的,從 ggininder.ko 的特徵可以從 github 找到這個 repo

    https://github.com/f0rb1dd3n/Reptile

    這個 module 功能很多,可以隱藏檔案、Shell、Reverse Shell、Port Knocking 等功能

    於是我們回顧第二台主機,也發現有一樣的東西,但第二天我們本來就有做更新 kernel 所以無意間已經將這個 module 給移除了,也認為第二天被改 Flag、刪除 index.php 就是紅隊透過它做事的

比賽趣事、觀察

由於我們發現記分板實在很難看出各隊扣分的狀況,所以寫了工具來記錄分數異動,確認是否失分

第二天下午~比賽結束的 Log : https://pastebin.com/raw/RQ569MWD

有趣的是,在第三題出現之前,Service Check 被主辦打開,所以幾乎所有隊伍都被扣分,除了我們,因為我們已經防禦好主機了,不過主機正式上線後,主辦偷偷把分數加回來也沒通知大家分數有異常

分數補回的紀錄

========================================================
Fire in the hold 5000分
2019/07/10 01:30:36
========================================================
吃飯睡覺打東東 5000分
2019/07/10 01:30:47
========================================================
誠意至上 5000分
2019/07/10 01:30:58
========================================================
...
========================================================
<5t1 5000分
2019/07/10 01:31:55
========================================================
HailTzuyu 5000分
2019/07/10 01:32:01
========================================================
The TeaMan 5000分
2019/07/10 01:32:13
========================================================
...
========================================================
lionbug 請給大家練習的機會 5000分
2019/07/10 01:33:04
========================================================
Hyper_Defensive 4000分
2019/07/10 01:33:21
========================================================
swt02026 5000分
2019/07/10 01:33:27
========================================================
黃金甲 5000分
2019/07/10 01:33:38
========================================================
三芝小豬與清水小紅帽 5000分
2019/07/10 01:33:44
========================================================
ls -al 5000分
2019/07/10 01:33:55
========================================================
MeowMeow 5000分
2019/07/10 01:34:01
========================================================
果核果核,逆向飛天 5000分
2019/07/10 01:34:12
========================================================
亞里斯多德 5000分
2019/07/10 01:34:24
========================================================
...
========================================================
========================================================
臺灣棒棒 5000分
2019/07/10 01:34:35
========================================================
噗瀧共 5000分
2019/07/10 01:34:41
========================================================
海賊王 5000分
2019/07/10 01:34:53
========================================================
哥就是鴿 5000分
2019/07/10 01:34:58
========================================================
台灣鴿 5000分
2019/07/10 01:35:10
========================================================
RGB Nighthawk 5000分
2019/07/10 01:35:15
========================================================
CMYK Nighthawk 5000分
2019/07/10 01:35:27
========================================================
fishman 3000分
2019/07/10 01:35:33
========================================================
fishman 2000分
2019/07/10 01:35:38
========================================================

但是某隊的分數似乎被多加了 (主辦說是他們被多扣,我也不知道是啥時被多扣,根本沒通知大家)

========================================================
台灣鴿 3000分
2019/07/10 01:21:17
========================================================

第三天更有趣的事情發生了,有人分數又開始亂跳 ( Service Check 是一次檢查所有隊伍服務,所以照理說有異動都是大家一起變動,至少我們記錄到的LOG是這樣子,但不知道這隊伍為啥分數會跳來跳去

========================================================
台灣鴿 -1000分
2019/07/10 10:07:42
========================================================
...
========================================================
台灣鴿 -1000分
2019/07/10 10:08:05
========================================================
台灣鴿 -1000分
2019/07/10 10:08:34
========================================================
台灣鴿 -1000分
2019/07/10 10:08:58
========================================================
台灣鴿 -1000分
2019/07/10 10:09:21
========================================================
台灣鴿 -1000分
2019/07/10 10:09:44
========================================================
...
========================================================
台灣鴿 -1000分
2019/07/10 10:10:26
========================================================
台灣鴿 -1000分
2019/07/10 10:10:43
========================================================
台灣鴿 -1000分
2019/07/10 10:11:07
========================================================
...
========================================================
台灣鴿損失 9000分
2019/07/10 10:34:52
========================================================

最後感謝所有隊友的努力,讓我們第二階段從 1X名 回到第 3 名 <(_ _)>

留言

comments