# MalwareMustDie! #ELF from China, # DDoS backdoor tool with account management. # CNC is alive (TO BE BLOCK) in : 183.60.202.59||4134 | 183.0.0.0/10 | CHINANET | CN | CHINATELECOM.COM.CN | CHINANET GUANGDONG PROVINCE NETWORK // The sample... $ date Tue Jul 29 11:00:26 JST 2014 $ ls -alF total 2504 drwxrwxrwx 2 MMD wheel 512 Jul 29 10:58 ./ drwxrwxrwx 43 MMD wheel 1536 Jul 29 10:58 ../ -rwxr--r-- 1 MMD wheel 2492148 Jul 20 06:47 txmap* $ md5 txmap MD5 (txmap) = 917a2a3d8c30282acbe7b1ff121a4336 $ // ELF... ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x8048130 Start of program headers: 52 (bytes into file) Start of section headers: 2491188 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 5 Size of section headers: 40 (bytes) Number of section headers: 24 Section header string table index: 23 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .note.ABI-tag NOTE 080480d4 0000d4 000020 00 A 0 0 4 [ 2] .init PROGBITS 080480f4 0000f4 000030 00 AX 0 0 4 [ 3] .text PROGBITS 08048130 000130 0bde0c 00 AX 0 0 16 [ 4] __libc_freeres_fn PROGBITS 08105f40 0bdf40 000ffa 00 AX 0 0 16 [ 5] .fini PROGBITS 08106f3c 0bef3c 00001c 00 AX 0 0 4 [ 6] .rodata PROGBITS 08106f60 0bef60 018720 00 A 0 0 32 [ 7] __libc_subfreeres PROGBITS 0811f680 0d7680 00002c 00 A 0 0 4 [ 8] __libc_atexit PROGBITS 0811f6ac 0d76ac 000004 00 A 0 0 4 [ 9] .eh_frame PROGBITS 0811f6b0 0d76b0 0195b0 00 A 0 0 4 [10] .gcc_except_table PROGBITS 08138c60 0f0c60 004725 00 A 0 0 4 [11] .tdata PROGBITS 0813e388 0f5388 000010 00 WAT 0 0 4 [12] .tbss NOBITS 0813e398 0f5398 000020 00 WAT 0 0 4 [13] .ctors PROGBITS 0813e398 0f5398 000024 00 WA 0 0 4 [14] .dtors PROGBITS 0813e3bc 0f53bc 00000c 00 WA 0 0 4 [15] .jcr PROGBITS 0813e3c8 0f53c8 000004 00 WA 0 0 4 [16] .data.rel.ro PROGBITS 0813e3e0 0f53e0 000814 00 WA 0 0 32 [17] .got PROGBITS 0813ebf4 0f5bf4 000078 04 WA 0 0 4 [18] .got.plt PROGBITS 0813ec6c 0f5c6c 00000c 04 WA 0 0 4 [19] .data PROGBITS 0813ec80 0f5c80 16a0f4 00 WA 0 0 32 [20] .bss NOBITS 082a8d80 25fd74 007748 00 WA 0 0 32 [21] __libc_freeres_pt NOBITS 082b04c8 25fd74 000014 00 WA 0 0 4 [22] .comment PROGBITS 00000000 25fd74 0004da 00 0 0 1 [23] .shstrtab STRTAB 00000000 26024e 0000e4 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000000 0x08048000 0x08048000 0xf5385 0xf5385 R E 0x1000 LOAD 0x0f5388 0x0813e388 0x0813e388 0x16a9ec 0x172154 RW 0x1000 NOTE 0x0000d4 0x080480d4 0x080480d4 0x00020 0x00020 R 0x4 TLS 0x0f5388 0x0813e388 0x0813e388 0x00010 0x00030 R 0x4 GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4 Section to Segment mapping: Segment Sections... 00 .note.ABI-tag .init .text __libc_freeres_fn .fini .rodata __libc_subfreeres __libc_atexit .eh_frame .gcc_except_table 01 .tdata .ctors .dtors .jcr .data.rel.ro .got .got.plt .data .bss __libc_freeres_ptrs 02 .note.ABI-tag 03 .tdata .tbss 04 // These are the DONTs.. There are no section groups in this file. There is no dynamic section in this file. There are no relocations in this file. There are no unwind sections in this file. No version information found in this file. Notes at offset 0x000000d4 with length 0x00000020: Owner Data size Description GNU 0x00000010 NT_VERSION (version) // Is in VT...ps: I didn't upload this.. [34]VirusTotal https://www.virustotal.com/en/file/92c87b7bddb66de8a5a27d944b5d4b46c59b38047b8a5fc381118c615c3775f9/analysis/1406605801/ SHA256: 92c87b7bddb66de8a5a27d944b5d4b46c59b38047b8a5fc381118c615c3775f9 File name: txmap Detection ratio: 10 / 53 Analysis date: 2014-07-19 23:16:24 UTC ( 1 week, 2 days ago ) First submission 2014-07-19 23:16:24 UTC ( 1 week, 2 days ago ) Last submission 2014-07-19 23:16:24 UTC ( 1 week, 2 days ago ) // Detected as, guess what? "Elknot" Antivirus Result Update Avast ELF:Elknot-N [Trj] 20140719 ClamAV Unix.Trojan.Elknot-1 20140719 DrWeb Linux.DDoS.6 20140719 ESET-NOD32 Linux/Agent.F.Gen 20140719 Ikarus DoS.Linux.Elknot 20140719 Jiangmin Backdoor/Linux.ju 20140719 Kaspersky Backdoor.Linux.Mayday.g 20140719 Microsoft DoS:Linux/Elknot.G 20140719 Sophos Linux/DDoS-AZ 20140719 VIPRE Backdoor.Linux.Elknot.f (v) 20140720 // etc: File size 2.4 MB ( 2492148 bytes ) File type ELF, Magic literal ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, stripped // Binary check.. MIMEType application/octet-stream CPUByteOrder Little endian CPUArchitecture 32 bit FileType ELF executable FileAccessDate 2014:07:20 00:17:03+01:00 ObjectFileType Executable file CPUType i386 FileCreateDate 2014:07:20 00:17:03+01:00 /---------------/ / First analysis/ /---------------/ // Compiler Source file: Fake.cpp Global.cpp main.cpp Manager.cpp ServerIP.cpp StatBase.cpp ThreadAttack.cpp ThreadHostStatus.cpp ThreadTaskManager.cpp ThreadTimer.cpp AutoLock.cpp FileOp.cpp Log.cpp Md5.cpp Media.cpp NetBase.cpp ThreadCondition.cpp Thread.cpp ThreadMutex.cpp Utility.cpp // UNIX path slurped: /bin/sh /cpuinfo /dev/console /dev/full /dev/log /dev/null /dev/tty /etc/fstab /etc/host.conf /etc/ld.so.cache /etc/localtime /etc/mtab /etc/nsswitch.conf /etc/resolv.conf /etc/suid-debug /gcof /lib/ /lib/obsolete/linuxthreads/ /loc /locale.alias /meminfo /proc /proc/ /proc/%d/exe /proc/cpuinfo /proc/cpuinfo /proc/meminfo /proc/net /proc/net/dev /proc/self/exe /proc/self/exe /proc/self/maps /proc/self/maps /proc/stat /proc/stat /proc/sys/kernel/ngroups_max /proc/sys/kernel/ngroups_max /proc/sys/kernel/osrelease /proc/sys/kernel/osrelease /proc/sys/kernel/rtsig-max /proc/sys/kernel/rtsig-max /proc/sys/kernel/version /staf /usr /usr/lib/ /usr/lib/gconv /usr/lib/gconv/gconv-modules.cache /usr/lib/locale /usr/lib/locale/locale-archive /usr/libexec/getconf /usr/lib/gconv/gconv-modules.cache /usr/lib/locale /usr/lib/locale/locale-archive /usr/libexec/getconf /usr/share/locale /usr/share/zoneinfo /var/profile /var/run/nscd/socket /var/tmp // Where & how it was compiled: GCC: (GNU) 4.0.0 20050519 (Red Hat 4.0.0-8) // And the compat: GCC: (GNU) 4.2.1 // Variable templates: cp %s %s %s %s 1 cp %s %sa %m/%d/%y %H:%M %H:%M:%S %.*Lf =t%j ^2XX% 2I%% Arena %d: system bytes = %10u in use bytes = %10u max mmap regions = %10u max mmap bytes = %10lu *** glibc detected *** %s: %s: 0x%s *** %Y-%m-%d %I:%M:%S %p <%d> syslog: unknown facility/priority: %x MemFree: %ld kB MemTotal: %ld kB %a %b %e %H:%M:%S %Y %a %b %e %H:%M:%S %Z %Y %p%t%g%t%m%t%f %a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N +%c %a %l !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ *** %n in writable segment detected *** *** invalid %N$ use detected *** %[^0-9,+-] %hu:%hu:%hu M%hu.%hu.%hu%n file=%s [%lu]; generating link map dynamic: 0x%0*lx base: 0x%0*lx size: 0x%0*Zx entry: 0x%0*lx phdr: 0x%0*lx phnum: %*u file=%s [%lu]; needed by %s [%lu] find library=%s [%lu]; searching (%s from file %s) (%s) trying file=%s search cache=%s symbol=%s; lookup in file=%s [%lu] file=%s [%lu]; needed by %s [%lu] (relocation dependency) binding file %s [%lu] to %s [%lu]: %s symbol `%s' [%s] %s: Symbol `%s' has different size in shared object, consider re-linking %s: no PLTREL found in object %s %s: out of memory to store relocation results for %s relocation processing: %s%s %s: %s: %s%s%s%s%s %s: error: %s: %s (%s) %s: cannot open file: %s %s: cannot create file: %s %s: cannot map file: %s %s: cannot stat file: %s %s: file is no correct profile data file for `%s' %s%s%s %s%s%s: %s opening file=%s [%lu]; direct_opencount=%u closing file=%s; direct_opencount=%u file=%s [%lu]; destroying link map calling fini: %s [%lu] cannot load auxiliary `%s' because of empty dynamic string token substitution load auxiliary object=%s requested by file=%s load filtered object=%s requested by file=%s calling init: %s calling preinit: %s checking for version `%s' in file %s [%lu] required by file %s [%lu] @%,1 t%~ _u%1 st(j%R J<%u ZY@t% |%u; %s:%s %d:%d cpu MHz : %d.%d cpu %llu %llu %llu %llu %s %llu %llu %llu %llu %7s %llu %lu %lu %lu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu %lu %lu (%d) [ %02d.%02d %02d:%02d:%02d.%03ld ] [%lu] [%s] %s %02x %lld %d.%d.%d.%d /proc/%d/exe %m/%d/%y %H:%M %H:%M:%S %.*Lf =t%j ^2XX% 2I%% Arena %d: system bytes = %10u in use bytes = %10u max mmap regions = %10u max mmap bytes = %10lu *** glibc detected *** %s: %s: 0x%s *** %[^0-9,+-] %hu:%hu:%hu M%hu.%hu.%hu%n %Y-%m-%d %I:%M:%S %p <%d> %h %e %T [%d] syslog: unknown facility/priority: %x MemTotal: %ld kB MemFree: %ld kB %d.%d.%d.%d opening file=%s [%lu]; direct_opencount=%u calling fini: %s [%lu] closing file=%s; direct_opencount=%u file=%s [%lu]; destroying link map %a %b %e %H:%M:%S %Y %a %b %e %H:%M:%S %Z %Y %p%t%g%t%m%t%f %a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N +%c %a %l !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ *** %n in writable segment detected *** *** invalid %N$ use detected *** %s %s %s %s %d %d %d %d %s: line %d: expected `on' or `off', found `%s' %s: line %d: cannot specify more than %d trim domains %s: line %d: list delimiter not followed by domain %s: line %d: expected service, found `%s' %s: line %d: cannot specify more than %d services %s: line %d: list delimiter not followed by keyword %s: line %d: bad command `%s' %s: line %d: ignoring trailing garbage `%s' (%s from file %s) (%s) trying file=%s file=%s [%lu]; generating link map dynamic: 0x%0*lx base: 0x%0*lx size: 0x%0*Zx entry: 0x%0*lx phdr: 0x%0*lx phnum: %*u file=%s [%lu]; needed by %s [%lu] find library=%s [%lu]; searching search cache=%s symbol=%s; lookup in file=%s [%lu] file=%s [%lu]; needed by %s [%lu] (relocation dependency) binding file %s [%lu] to %s [%lu]: %s symbol `%s' [%s] %s: Symbol `%s' has different size in shared object, consider re-linking %s: no PLTREL found in object %s %s: out of memory to store relocation results for %s relocation processing: %s%s cannot load auxiliary `%s' because of empty dynamic string token substitution load auxiliary object=%s requested by file=%s load filtered object=%s requested by file=%s %s: %s: %s%s%s%s%s %s: error: %s: %s (%s) calling init: %s calling preinit: %s checking for version `%s' in file %s [%lu] required by file %s [%lu] %s: cannot open file: %s %s: cannot stat file: %s %s: cannot create file: %s %s: cannot map file: %s %s: file is no correct profile data file for `%s' %s%s%s %s%s%s: %s // Some strings: (i have strong reason pasting this part) 0x00002B1 XZj/S 0x00002D2 SWh{o 0x0013755 P <*t 0x00139C5 P <*t 0x0017CFC t 8Y% 0x001E404 t 8X% 0x001F730 t 8Q% 0x0021A0B t 8X% 0x00229C3 t 8A% 0x00233A5 /~|;U 0x00236AA t 8Y% 0x00240E5 /~|;U 0x00243EA t 8Y% 0x0032FF2 P0<%u 0x00344BA