4ensiX

4ensiX

FPと言ったものはFPを選んだが表示はTPになっていることに気づいた。

LetsDefend level 1 alert SOC107 - Privilege Escalation Detected event-id 19

Details

EventID: 19
Event Time: Sept. 22, 2020, 3:40 p.m.
Rule: SOC107 - Privilege Escalation Detected
Level: Security Analyst
Source Address 172.16.15.78
Source Hostname KatharinePRD
File Name creditcard
File Hash 7299c49dd85069e47d6514ab5e10c264
File Size 17K
Device Action Allowed
Download (Password:infected): 7299c49dd85069e47d6514ab5e10c264.zip

playbook

Define Threat Indicator

Answer:Other

Check if the malware is quarantined/cleaned

まず、

Device Action Allowed

から実行されていそうだ。また、EndpointのProcess Historyより

creditcard
MD5:7299c49dd85069e47d6514ab5e10c264
Path:/home/katharine/Documents/creditcard
Cmdline:/home/katharine/Documents/creditcard

実行が確認できる。
Answer:Not Quarantined

Analyze Malware

creditcard -> 27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d

ファイル概要

$ file creditcard 
creditcard: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b363505cb5728e34f1104fe882b2e7b1431ffb76, for GNU/Linux 3.2.0, not stripped
$ sha256sum creditcard 
27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d  creditcard

VirusTotal 34/61: https://www.virustotal.com/gui/file/27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d
このプログラムはMaliciousである。ネットワーク通信するものではなさそうであり、CVE-2017-16995に関連するとのレポートがある。
少し中身を見てみる。radare2より、

[0x00001110]> pdf @sym.pwn
            ; CALL XREF from main @ 0x183a
┌ 343: sym.pwn ();
│           ; var int64_t var_28h  { > 0xffffffffffffffff} @ rbp-0x28
│           ; var int64_t var_20h  { > 0xffffffffffffffff} @ rbp-0x20
│           ; var int64_t var_18h  { > 0xffffffffffffffff} @ rbp-0x18
│           ; var int64_t var_10h  { > 0xffffffffffffffff} @ rbp-0x10
│           ; var int64_t var_8h  { > 0xffffffffffffffff} @ rbp-0x8
│           0x000016cc      55             push rbp
│           0x000016cd      4889e5         mov rbp, rsp
│           0x000016d0      4883ec30       sub rsp, 0x30
│           0x000016d4      e808ffffff     call sym.__get_fp
│           0x000016d9      488945f8       mov qword [var_8h], rax
│           0x000016dd      48b8ffffffff.  movabs rax, 0xffff87ffffffffff
│           0x000016e7      483945f8       cmp qword [var_8h], rax
│       ┌─< 0x000016eb      770c           ja 0x16f9
│       │   0x000016ed      488d3d840a00.  lea rdi, qword str.bogus_fp ; 0x2178 ; "bogus fp" ; int status
│       │   0x000016f4      e80efdffff     call sym.__exit             ; void _exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x16eb
│       └─> 0x000016f9      488b45f8       mov rax, qword [var_8h]
│           0x000016fd      4889c7         mov rdi, rax                ; uint32_t arg1
│           0x00001700      e8b3ffffff     call sym.get_sp
│           0x00001705      488945f0       mov qword [var_10h], rax
│           0x00001709      48b8ffffffff.  movabs rax, 0xffff87ffffffffff
│           0x00001713      483945f0       cmp qword [var_10h], rax
│       ┌─< 0x00001717      770c           ja 0x1725
│       │   0x00001719      488d3d610a00.  lea rdi, qword str.bogus_sp ; 0x2181 ; "bogus sp" ; int status
│       │   0x00001720      e8e2fcffff     call sym.__exit             ; void _exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x1717
│       └─> 0x00001725      488b45f0       mov rax, qword [var_10h]
│           0x00001729      4889c7         mov rdi, rax                ; uint32_t arg1
│           0x0000172c      e8f2feffff     call sym.__read
│           0x00001731      488945e8       mov qword [var_18h], rax
│           0x00001735      48b8ffffffff.  movabs rax, 0xffff87ffffffffff
│           0x0000173f      483945e8       cmp qword [var_18h], rax
│       ┌─< 0x00001743      770c           ja 0x1751
│       │   0x00001745      488d3d3e0a00.  lea rdi, qword str.bogus_task_ptr ; 0x218a ; "bogus task ptr" ; int status                                                                                                               
│       │   0x0000174c      e8b6fcffff     call sym.__exit             ; void _exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x1743
│       └─> 0x00001751      488b45e8       mov rax, qword [var_18h]
│           0x00001755      4889c6         mov rsi, rax
│           0x00001758      488d3d3a0a00.  lea rdi, qword str.task_struct____lx ; 0x2199 ; "task_struct = %lx\n" ; const char *format                                                                                               
│           0x0000175f      b800000000     mov eax, 0
│           0x00001764      e827f9ffff     call sym.imp.printf         ; int printf(const char *format)
│           0x00001769      488b45e8       mov rax, qword [var_18h]
│           0x0000176d      4805f8050000   add rax, 0x5f8
│           0x00001773      4889c7         mov rdi, rax                ; uint32_t arg1
│           0x00001776      e8a8feffff     call sym.__read
│           0x0000177b      488945e0       mov qword [var_20h], rax
│           0x0000177f      48b8ffffffff.  movabs rax, 0xffff87ffffffffff
│           0x00001789      483945e0       cmp qword [var_20h], rax
│       ┌─< 0x0000178d      770c           ja 0x179b
│       │   0x0000178f      488d3d160a00.  lea rdi, qword str.bogus_cred_ptr ; 0x21ac ; "bogus cred ptr" ; int status                                                                                                               
│       │   0x00001796      e86cfcffff     call sym.__exit             ; void _exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x178d
│       └─> 0x0000179b      488b45e0       mov rax, qword [var_20h]
│           0x0000179f      4883c004       add rax, 4
│           0x000017a3      488945d8       mov qword [var_28h], rax
│           0x000017a7      48b8ffffffff.  movabs rax, 0xffff87ffffffffff
│           0x000017b1      483945d8       cmp qword [var_28h], rax
│       ┌─< 0x000017b5      770c           ja 0x17c3
│       │   0x000017b7      488d3dfd0900.  lea rdi, qword str.bogus_uid_ptr ; 0x21bb ; "bogus uid ptr" ; int status                                                                                                                 
│       │   0x000017be      e844fcffff     call sym.__exit             ; void _exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x17b5
│       └─> 0x000017c3      488b45d8       mov rax, qword [var_28h]
│           0x000017c7      4889c6         mov rsi, rax
│           0x000017ca      488d3df80900.  lea rdi, qword str.uidptr____lx ; 0x21c9 ; "uidptr = %lx\n" ; const char *format                                                                                                         
│           0x000017d1      b800000000     mov eax, 0
│           0x000017d6      e8b5f8ffff     call sym.imp.printf         ; int printf(const char *format)
│           0x000017db      488b45d8       mov rax, qword [var_28h]
│           0x000017df      be00000000     mov esi, 0                  ; int64_t arg2
│           0x000017e4      4889c7         mov rdi, rax                ; uint32_t arg1
│           0x000017e7      e883feffff     call sym.__write
│           0x000017ec      e87ff8ffff     call sym.imp.getuid         ; uid_t getuid(void)
│           0x000017f1      85c0           test eax, eax
│       ┌─< 0x000017f3      7522           jne 0x1817
│       │   0x000017f5      488d3ddb0900.  lea rdi, qword str.spawning_root_shell ; 0x21d7 ; "spawning root shell" ; const char *s
│       │   0x000017fc      e83ff8ffff     call sym.imp.puts           ; int puts(const char *s)
│       │   0x00001801      488d3de30900.  lea rdi, qword str.bin_bash ; 0x21eb ; "/bin/bash" ; const char *string
│       │   0x00001808      e873f8ffff     call sym.imp.system         ; int system(const char *string)
│       │   0x0000180d      bf00000000     mov edi, 0                  ; int status
│       │   0x00001812      e8c9f8ffff     call sym.imp.exit           ; void exit(int status)
│       │   ; CODE XREF from sym.pwn @ 0x17f3
│       └─> 0x00001817      488d3dd70900.  lea rdi, qword str.not_vulnerable ; 0x21f5 ; "not vulnerable?" ; int status                                                                                                              
└           0x0000181e      e8e4fbffff     call sym.__exit             ; void _exit(int status)

spawning root shellや/bin/bashという文字列から間違いなくMaliciousであることは分かる。bogus* という文字列がチラホラと見られるため検索すると、
Get Root Privileges Using CVE-2017-16995 | Infinite Script
CVE-2017-16995/exploit-poc-pentest.c at master · gugronnier/CVE-2017-16995 · GitHub
これらに行き着いた。これがおそらく今回のMaliciousなプログラムの基になったものだと思われる。

Answer:Malicious

Check If Someone Requested the C2

Logには5か月あとに、特定のURLへのアクセスがあったが関係性が分からない、MaliciousなURLでなさそうであった。
プログラムを見るとネットワーク通信をしないようなプログラムであると思われるため、アクセスは無さそうだ。
Answer:Not Accessed

Add Artifacts

Value Type Comment
7299c49dd85069e47d6514ab5e10c264 MD5 Hash CVE-2017-16995, Privilege Escalation

End

f:id:Zarat:20220407201806p:plain
close alert event-id 19

いやいや、アクセスは無いですよ。