來源:https://blog.perched.io/dns-tunneling-other-hunts-w-rocknsm-bro-elk-52a4486e44d0
在這篇文章中蒸播,我將擴展我的DNS排版檢測帖子,并(重新)介紹DNS隧道檢測。
為了使這篇博客文章有價值禽翼,并適用于防御者和威脅獵人胚委,我們將涵蓋以下內(nèi)容:
1支示、與Bro一起設(shè)置RockNSM ELK實例炭懊。
2票渠、為其余步驟的配置克隆GitHub存儲庫翩活。
3阱洪、添加Elasticsearch搜索(模板)映射的額外字段。
4隅茎、Logstash配置額外的數(shù)據(jù)澄峰,使DNS隧道檢測更有效。此外辟犀,DNS的豐富添加俏竞,如IDN(即:Punycode/emoji)或如果域名是IP地址,將有助于額外的威脅搜索堂竟。
5魂毁、用于檢測的Kibana可視化和儀表板。
6出嘹、測試檢測方法席楚。
7、使用添加的logstash配置進行額外的搜索/檢測税稼。
在我開始之前烦秩,我必須認識一個我上周在做盡職調(diào)查時偶然發(fā)現(xiàn)的博客(https://www.binorassocies.com/en/blogs/2017/10/logstash-bro-dns-tunnel.html)。
雖然我上面提到的博客有一些很好的信息郎仆,但是我仍然在寫這篇文章只祠,因為我對它進行了一些擴展,提供了關(guān)于設(shè)置扰肌、Logstash配置和一些Kibana可視化/儀表板的完整演練抛寝。
一、DNS隧道/數(shù)據(jù)泄漏的介紹
雖然有許多工具可以用于植入C2和實現(xiàn)數(shù)據(jù)泄漏,但DNS的使用是一種有趣的方法盗舰。一般來說晶府,它沒有被適當(dāng)?shù)乜刂疲瑳]有被監(jiān)視钻趋,在大多數(shù)網(wǎng)絡(luò)上都是允許的川陆,并且大量的日志導(dǎo)致了巨大的覆蓋流量。因此爷绘,DNS隧道是C2的一個很好的選擇书劝。
為了在技術(shù)上進行級別設(shè)置,DNS請求可以包含255個字符(如果攻擊者控制DNS服務(wù)器土至,則包含更多)购对。正在泄漏的數(shù)據(jù)被編碼到域的其余空閑字符中。
例子:
這里我正在執(zhí)行一個查找neu5ron.com陶因,但添加I are secret data...作為編碼字符串骡苞。
JEQGC4TFEBZWKY3SMV2CAZDBORQS4LRO.neu5ron.com
類似于DNS數(shù)據(jù)泄漏的工作方式,將DNS用于C2將使用空閑字符進行來回通信(C2)楷扬。此外解幽,由于能夠使用Base 64編碼,很多時候隧道將使用TXT記錄烘苹。
二躲株、為什么每個人都應(yīng)該監(jiān)視/控制DNS
首先,我必須先說明镣衡,即使在控制DNS時霜定,DNS隧道仍然是非常可能的廊鸥。
DNS通常作為公司/網(wǎng)絡(luò)的一個關(guān)鍵優(yōu)先級被忽略望浩。然而,它的用例非常廣泛——安全/預(yù)防惰说、人力資源磨德、威脅搜索,以及可以幫助網(wǎng)絡(luò)取證的歷史數(shù)據(jù)庫(被動DNS)吆视。
在我們深入研究檢測過程之前典挑,重要的是要強調(diào)預(yù)防不是刀槍不入的。就像在安全領(lǐng)域的任何事情一樣啦吧,你必須權(quán)衡利弊搔弄,并向你的領(lǐng)導(dǎo)傳達你的安全實現(xiàn)是有成本效益的。
例如丰滑,如果正確設(shè)置DNS基礎(chǔ)設(shè)施(監(jiān)視和控制)需要4個小時,并且可以防止100個小時的事件響應(yīng)工作或客戶/用戶停機,那么您就有效地為您的公司/組織提供了經(jīng)濟利益褒墨。
我們已經(jīng)討論了監(jiān)視方面炫刷,但是控制是另一個關(guān)鍵的DNS進程。如果對手能夠使用他們自己的DNS服務(wù)器郁妈,他們可以有效地使用他們想要的任何域浑玛。例如,下面是使用“adobe.com”作為C2的場景噩咪。想想有多少白名單,繞過……
2.1顾彰、預(yù)防措施
以下是一些你可以考慮的預(yù)防措施:
1、考慮阻塞動態(tài)DNS胃碾,是的涨享,甚至“APT”使用免費域
2、動態(tài)DNS的其他示例可以在這里找到1仆百、2和3(https://threatconnect.com/blog/camerashy-infrastrucutre/)
3厕隧、下面是我編譯的動態(tài)DNS域列表(https://gist.githubusercontent.com/neu5ron/8dd695d4cb26b6dcd997/raw/5c31ae47887abbff76461e11a3733f26bddd5d44/dynamic-dns.txt)
4、如果可能的話俄周,考慮屏蔽廣告
5吁讨、考慮屏蔽惡意tld(https://www.spamhaus.org/statistics/tlds/)
2.2、積極影響
1峦朗、減少用戶停機時間建丧,因為不需要從感染中重新從映像中恢復(fù)他們的機器
2、使用被動DNS可以降低事件響應(yīng)波势、幫助臺以及在清理破壞過程中涉及到的任何人的成本(時間)
3翎朱、監(jiān)視和控制DNS可以防止在工作時用戶訪問和使用某些內(nèi)容時可能出現(xiàn)的特定HR違規(guī)/問題。成人的內(nèi)容或暴力的材料
2.3注意事項
1艰亮、管理和控制DNS需要對基礎(chǔ)設(shè)施的管理提供額外的支持
2闭翩、如果合法的域/服務(wù)被阻塞,這可能會導(dǎo)致用戶停機或業(yè)務(wù)影響
三迄埃、盡管DoH
即使使用HTTPs上的DNS (DoH)疗韵, DNS隧道檢測也與管理網(wǎng)絡(luò)相關(guān),因為很多時候允許DNS離開管理網(wǎng)絡(luò)侄非,但不允許出站HTTPs蕉汪。
此外,也有可能使用JA3 + JA3S散列和一些額外的數(shù)據(jù)分析逞怨,如頻率/計數(shù)者疤,來檢測DoH(https://github.com/salesforce/ja3)。
我提到這個是因為最近一些主要的DNS提供者叠赦,甚至是瀏覽器實現(xiàn)驹马,都提供了通過TLS/HTTPs執(zhí)行DNS請求的能力。
如果你有任何關(guān)于DoH的額外發(fā)現(xiàn),你想添加糯累,那么我將很高興收到你的來信算利,并將相應(yīng)地更新帖子。
四泳姐、一些檢測方法的問題
簡單地說效拭,我想指出當(dāng)前DNS隧道檢測方法的一些缺陷。許多“開箱即用”的檢測方法比人們想象的復(fù)雜得多胖秒。
4.1域的長度
在一周的時間內(nèi)缎患,我觀察到的域的長度如下,其次是看到的次數(shù):
69 characters?—?36,926,289
72 characters?—?20,965,981
75 characters?—?24,475,506
78 characters?—?694,677
93 characters?—?12,678
174 characters?—?1,309
因為我見過一些SIEMs或分析是圍繞域查找的長度構(gòu)建的阎肝,有些甚至特別指出超過70挤渔,這將導(dǎo)致數(shù)百萬次警告…
4.2被動DNS數(shù)據(jù)庫
我強烈推薦在日志基礎(chǔ)設(shè)施之外使用被動DNS數(shù)據(jù)庫,前提是您能夠負擔(dān)建立和管理基礎(chǔ)設(shè)施和(人力)資源盗痒。如果沒有這個選項蚂蕴,您可以使用現(xiàn)有的SIEM/日志基礎(chǔ)結(jié)構(gòu)!
4.3機器學(xué)習(xí)
使用頻率和子域唯一計數(shù)的檢測方法將導(dǎo)致許多誤報,以及使用數(shù)百個(如果不是數(shù)千個)子域的數(shù)千個廣告域俯邓、內(nèi)容傳遞網(wǎng)絡(luò)骡楼、郵件提供者和其他合法網(wǎng)站。
此外稽鞭,如果基于頻率(時間)鸟整,只是通過隧道緩慢地通信以繞過該檢測機制的問題。
五朦蕴、給我們看一些有用的東西
1. ELK +Bro使用RockNSM
對于這個設(shè)置篮条,我們將使用RockNSM。下面是一些詳細的演練(如果您已經(jīng)熟悉span和tap吩抓,請?zhí)揭曨l2)涉茧。
許多人都知道,監(jiān)視基礎(chǔ)設(shè)施是攻擊者的目標疹娶,這就是為什么我選擇RockNSM而不是其他ELK+Bro部署的原因伴栓,因為它的設(shè)計安全實現(xiàn)使用SELinux。
2. RockNSM Enrichment
git clone https://github.com/neu5ron/rocknsm-add-enrichment
現(xiàn)在將存儲庫上載到您的RockNSM服務(wù)器(如果您沒有從服務(wù)器本身執(zhí)行g(shù)it克隆)雨饺。
3.額外Elasticsearch配置
在開始獲取新數(shù)據(jù)之前钳垮,我們需要確保將這些新配置應(yīng)用到Elasticsearch數(shù)據(jù)庫中。
通過執(zhí)行以下操作添加Elasticsearch映射模板:
curl -H 'Content-Type: application/json' -XPUT "http://localhost:9200/_template/bro-domain-names" -d @rocknsm-add-enrichment/elasticsearch/index-mappings/92-bro-domain-names.json;
4. 額外的Logstash配置
為了檢測DNS隧道/exfil中的模式额港,我們需要為一級域(即TLD)饺窿、一級+二級域(即google.com)和一級+二級+三級域(即www.google.com)添加特定的字段。
原因是移斩,如前所述肚医,DNS隧道/exfil將創(chuàng)建大量惟一的子域绢馍。因此,我們將在域的第1 + 2級執(zhí)行聚合肠套。
此外痕貌,我們還希望添加其他元數(shù)據(jù),如長度和總級別(即:計算每個“.”)糠排。
# Copy logstash file to rocknsm
sudo cp rocknsm-add-enrichment/logstash/conf.d/logstash-816-domain-enrichment-filter.conf /etc/logstash/conf.d/
# Give logstash permissions for the file
sudo chown logstash:logstash /etc/logstash/conf.d/logstash-816-domain-enrichment-filter.conf
# Change permissions
sudo chmod 640 /etc/logstash/conf.d/logstash-816-domain-enrichment-filter.conf
# Restart logstash to implement new configuration
sudo systemctl restart logstash
5. Kibana可視化/儀表盤
我已經(jīng)創(chuàng)建并共享了所有必要的Kibana可視化/儀表板,以便您自己查看和測試檢測方法超升。
首先入宦,我們需要導(dǎo)入可視化/儀表盤文件:
這可以在Kibana中執(zhí)行,在登錄后室琢,進入“管理”乾闰,然后單擊“保存的對象”,然后單擊“導(dǎo)入”盈滴,并從之前收集的存儲庫中選擇“rocknsm-add-enrichment/ Kibana /dns.json”文件涯肩。
其次,我們需要刷新索引:
這可以在Kibana中完成巢钓,登錄后進入“Management”病苗,點擊“Index Patterns”,選擇“bro-*”索引症汹,點擊右上角的recycle按鈕(“Refresh field list”)硫朦。
6. 檢測方法
我們將在第1 + 2級域上進行聚合,并尋找唯一子域的高計數(shù)背镇。
測試是使用注入的DNS隧道PCAP在我的兩個環(huán)境中執(zhí)行的咬展。我將向您展示如何在您自己的網(wǎng)絡(luò)/設(shè)置中進行同樣的操作。
執(zhí)行查找的主機唯一計數(shù)的子聚合可能有助于檢測瞒斩。例如破婆,一個主機在4000個子域上執(zhí)行查找要比500個主機在4000個惟一子域上執(zhí)行查找可疑得多。此外胸囱,域內(nèi)最大總長度和最大級別上的子聚合允許我們做出更明智的決策祷舀。
7、PCAP注入實時網(wǎng)絡(luò)
您將注意到旺矾,在這個網(wǎng)絡(luò)中蔑鹦,隧道式域“chickenkiller[-]com”與具有最獨特子域的域相去甚遠。事實上箕宙,它的子域名少了37,424個!
結(jié)合只有1臺UniqHosts執(zhí)行查找和惟一子域(惟一域名)與總查找(計數(shù))4,837 / 4,858的比率(在本例中嚎朽,子域多于查找?),我們可以開始看到該域中的一些異常值柬帕。
8哟忍、PCAP注入(我的)家庭網(wǎng)絡(luò)
顯然狡门,相同的隧道域比其他域突出得多自点。
另外寂呛,注意在這個儀表板中有一個domain_1n2n3_name的(數(shù)據(jù)表)可視化,它用于在co.uk之類的環(huán)境中進行隧道/exfil的域嫩舟。
這樣您就可以在唯一的1n2子域中過濾掉co.uk爆安,但是類似于somedomain.co.uk這樣的東西仍然會出現(xiàn)在這個可視化中叛复。
六、如何將PCAP注入您的網(wǎng)絡(luò)
# Find interface to replay the PCAP to
sudo tcpreplay --listnics
# Make sure to use one of the NICs that is listed that is the same as one of the listening NICs in /etc/rocknsm/config.yml under "rock_monifs"
grep -A5 "rock_monifs" /etc/rocknsm/config.yml
# Convert PCAP GZ to regular PCAP for replay
editcap -F pcap rocknsm-add-enrichment/testing/dnscat2.pcap.gz rocknsm-add-enrichment/testing/dnscat2.pcap
# Replay the PCAP, replacing "enp0s8" with your interface determined above
sudo tcpreplay -i enp0s8 -p 1250 rocknsm-add-enrichment/testing/dnscat2.pcap
# You should then see output similar to this
Actual: 10000 packets (1465823 bytes) sent in 7.99 seconds
Rated: 183245.6 Bps, 1.46 Mbps, 1250.12 pps
Flows: 7 flows, 0.87 fps, 9682 flow packets, 318 non-flow
Statistics for network device: enp0s8
Successful packets:? ? ? ? 10000
Failed packets:? ? ? ? ? ? 0
Truncated packets:? ? ? ? 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN):? 0
將數(shù)據(jù)注入網(wǎng)絡(luò)后扔仓,等待一分鐘數(shù)據(jù)刷新褐奥,然后登錄Kibana查看檢測方法,然后進入Dashboard翘簇,選擇“DNS隧道檢測”撬码。
完成后,您可以從Elasticsearch/ELK中刪除“注入”數(shù)據(jù)(這樣我們就不會從測試數(shù)據(jù)中持續(xù)得到假陽性)版保。這不會刪除您擁有的任何其他數(shù)據(jù)呜笑。
您可以通過CLI或Kibana“開發(fā)工具”執(zhí)行此操作,如下所示:
POST /bro-*/_delete_by_query
{
"query": {
"bool": {
"must": [
{ "match": { "domain_1n2n3_name": "sirknightthe.chickenkiller.com" } }
]
}
}
}
七. 額外的檢測/狩獵
因為我們在Logstash管道中添加了額外的元數(shù)據(jù)/豐富彻犁,所以我們可以在DNS叫胁、HTTP和SSL日志中檢測額外的可輕松實現(xiàn)的目標。
7.1檢測IDN/Punycode/Emoji域
當(dāng)IDN同質(zhì)圖攻擊被用來在訪問他們認為屬于蘋果的域名時欺騙用戶時袖裕,引起了一些新聞曹抬。
domain.is_idn:true OR domain.has_non_ascii:true
7.2檢測SSL或HTTP中的IP地址域
domain.ends_with_int:true AND domain_type:(ssl OR http)
7.3檢測SSL或HTTP中無效的IP或域
domain.has_dot:false AND domain_type:(ssl OR http)
在您嘗試儀表板和可視化之后,我希望聽到您的任何反饋和建議急鳄。