콤푸타/해킹&보안

[windows] 윈도우 해킹(2), lnk 파일 악성코드

어둠의다크 2024. 11. 30. 14:01

WMIC 글을 작성하고 보니 다른 여러가지 케이스들도 정리해보면 어떨까 하는 생각이들었다. 윈도우 시스템에서 악용될 수 있는 RCE 수단은 정말 다양하다. 그 중에 최근 북한 APT 그룹이 많이 사용하는 lnk 악성파일 원리를 한번 분석해보려고 한다.

 

1. lnk 파일 악성코드 분석

 윈도우에서는 lnk 기능을 지원한다. 쉽게 생각하면 '바로가기' 기능이다. MS Office의 dd나 매크로 취약점이 패치되고 나서 공격자들이 이쪽으로 눈을 돌리기 시작했다. 그럼 lnk 파일 악성코드가 어떻게 동작하는지 한번 살펴보자

 hxd로 링크파일을 오픈하니 원본 파일이 나와서 이렇게 xxd를 사용해 데이터를 확인해보았다. 여기는 ShellLinkHeader로 시각 정보를 포함하고 있기 때문에 포렌식적으로도 중요한 의미를 가지고 있다. ShellLinkHeader에서 우리가 주의깊게 보아야 할 부분은 바로 이 0x14~0x17 영역이다. 이 영역은 LinkFlags라 불리며, 아래 010edit 이미지를 보면 알겠지만 다양한 flag를 가지고 있다. 그리고 이 flag설정에 의해 값이 변화한다. 그 중 우리는 추가적인 명령 전달을 위해 HasArguments 플래그를 활성화 시켜야한다. 

 또 kimsuky 샘플에서 보이는 것 처럼 fake icon을 입히기 위해 HasIconLocation 플래그도 활성화 시켜 주어야 한다. 

 HasArguments 플래그와 HasIconLocation 플래그 활성화 후 값을 입력한 변화는 아래 사진과 같다. vscode.exe 의 링크 파일이지만 텍스트 파일 아이콘을 가지게 되었다. 하지만 여기서 끝이 아니다. 우리가 원하는 명령을 실행 시키려면 target이 powershell이 되어야한다. 이제 target을 변경해보자.

ShellLinkHeader는 항상 76byte 크기를 가지며 이 76 byte 바로 뒤에는 LinkTargetIDList가 위치한다. 이 LinkTargetIDList는 가변 길이이며 IDListSize(2 byte), IDList(가변) 로 이루어져 있다. 즉, 위 이미지에서 0x4C 영역 2e02 가 IDListSize가 된다. 이 값은 little endian이므로 실제 값은 0x22e가 되고 이는 558이다. 즉 LinkTargetIDList 영역 전체 크기는 558이고, 76~634 까지로 해석할 수 있다.

 그런데 분석 중에 가만히 생각해보니, 엄한 lnk 파일을 변경시키는거보다 그냥 lnk 파일을 만들어서 그냥 아이콘을 바꿔주고 명령을 입력해주면 되는거 아닌가? 하는 생각이 들었다. 당장 해보자. 파워쉘 링크 파일을 생성한 후 대상(T) 칸에 내가 좋아하는 netstat -naotp TCP 명령을 입력해 주었고, 또 아이콘을 txt 로 바꾸어주었다.

아주 완벽하게 잘 동작한다. 여기서 또 이 터미널창이 생기지않고 백그라운드에서만 실행되게 하거나, decoy 문서를 보여주는 등 다양한 동작을 하도록 링크파일을 수정할 수 있다.

 

2. 심리를 파고드는 사회공학 공격

 해커는 사람의 심리를 교묘하게 이용한다. 스미싱이나 보이스피싱처럼 말이다. 금융권 메일을 교묘하게 사칭하거나, 어떤 사람의 호기심을 유발해 파일을 실행시키거나 또는 어떤사람에게 정말 필요한 정보로 위장하기도 한다. 공격자들의 사회공학적 공격 방법을 한번 알아보자.

a. 피싱 메일

많은 공격자들이 Initial Access 방법으로 피싱 메일을 공격을 선택한다. 대표적인 케이스로 다음과 같은 경우가 있다.

  1. 북한 전문가나 또는 북한 관련 운동가에게 북한 정보로 위장한 악성파일을 첨부(주로 Kimsuky)
  2. 구인공고 글에 공개된 메일로 이력서로 위장한 악성파일 첨부(랜섬웨어)
  3. 유출된 기밀자료인것처럼 위장한 악성파일 

사실 많은 랜섬웨어 공격이 피싱 메일이나 drive by download 공격으로 일어난다. 사이버 보안을 모르는 사람은 잘 모르는 파일을 무턱대고 실행하는 경우가 매우 많다. 이런 링크 악성파일이 공격에 활용된 케이스를 한번 보자.

 

b. 실제 사회공학 공격 기법이 적용된 공격 사례

  1. 공격자는 국세청을 사칭해 악성파일이 포함된 압축파일을 메일에 첨부하였다. 자 벌써 첫 번째 사회공학적 공격기법이 등장했다. 바로 우리의 의심을 낮추려고 국세청을 사칭한 것이다.
  2. 압축 파일을 자세히 보면 '바로 가기' 파일인 것을 확인할 수 있다. 압축 상태에서는 이상을 알 수 있지만, 압축이 해제되고 나면 앞서 우리가 수행했던 것 처럼 아이콘 변경으로 인해 한글 파일 아이콘으로 보일 것이다. 이것이 두 번째 사회공학 공격 기법이다.
  3. 이제 세 번째 사회 공학적 기법이 등장한다. 또 링크 파일 이름을 보면 '국세청 종합소득세 해명자료 ...' 로 마치 실제로 있을법한 그럴 듯한 파일명을 가지고있다. 이 역시 우리의 의심을 낮추려는 의도다.
  4. 네 번째는 악성 파일과 함께 압축되어있는 (정상인지는 알 수 없지만) '국채 및 통화안정~', '근로소득지급명세서~' 두 개 파일이다. 이러한 문서를 decoy 문서라 한다. 악성 파일과 함께 정상파일을 첨부하여 의심을 낮추고 악성파일의 실행을 유도하는 역할이다.
  5. 마지막 다섯 번째는 사진에는 보이지 않지만 아마도 공격자는 링크파일의 확장자를 변경했을 것이다(추정이다). 확장자를 변경 함으로써 사용자가 "아 이 파일은 hwp 확장자를 가진 한글 파일이겠구나" 라고 착각하도록 유도한다.

기술적으로 대단한건 없지만 이 모든것들이 우리의 심리적 장벽을 낮추고 또 실행을 유도한다. 그리고 정말 강력한 효과를 발휘한다.

 

3. 예방 방법 & 대응 방안

 자 이런 링크파일 악성 파일의 공격 방법에 대해 알아보았는데, 공격을 알아보았으니 이제 대응방안도 알아야한다. 몇 가지 중요한 포인트들이 있는데 바로 짚어보자.

a. 확장자 표시

 필자는 마이크로소프트가 윈도우 디펜더를 비활성화하기 어렵게 만드는 데 심혈을 기울이면서도(그만큼 보안에 신경쓰면서), 여전히 파일 확장자 표시를 기본적으로 숨기도록 설정한 이유는 이해하기 어렵다. 아래 사진의 차이가 보이는가?

셋 다 링크 파일이지만 가운데 mal_lnk2 파일에는 .txt 라는 확장자를 붙여주었다. 그리고 실행시 문제없이 동작한다. 사용자는 텍스트 파일을 실행한다고 착각하게 되는 것이다. 확장자 표시 기능을 활성화 하면 또다른 장점이 생기는데, 바로 이중 확장자 공격에 당하지 않는다는 것이다. 아래 사진을 한 번 보자

 왼쪽과 오른쪽의 차이가 보이는가? 왼쪽 상황에서는 이상함을 감지할 수 있지만, 오른쪽에서는?
 만약 오른쪽 상황에서 real_text.txt.exe 파일이 랜섬웨어 파일이고, 아이콘을 텍스트 아이콘 모양으로 변조했다면?
 아마도 많은 사람들이 큰 의심 없이 이 악성 파일을 실행할 것이다.

 

b. 아이콘 왼쪽 하단 화살표 표시

 아이콘 왼쪽 하단에 화살표 표시가 있다면 링크 파일로 의심해볼 수 있다. 그리고 보통 문서 파일들에는 이런 화살표가 붙지 않는다. real_text.txt 파일처럼 말이다.

 

c. 실행 전 검사 & 검색

 악성파일 실행 전 검사나 검색을 해 보는 것도 좋은 방법이다. 이때 검색은 hash를 사용하는 것이 좋다. 아래 사진처럼 말이다.

 

4. 요약

  1. 확장자 표시를 활성화
  2. 파일 실행 전에 파일이 이상하지는 않은지 살펴보자
  3. 또 의심스럽다면 실행하지말고 https://virustotal.com에서 검색해 보는것도 좋은 방법이다.

 

끝!