#1 웹 악성코드 위협/탐지 스크립트 개발 - 작성했던 코드 돌아보기

음.... 원래는 각각 수집했던 URL을 나눠서 폴더마다 분리해 관리하려고 했다.

과거 마지막으로 수정한게 2019년이다 이때까지만 해도 열정이 아직...!

과거 유포됬던 파밍 악성코드의 특징은 유포지(일반 웹사이트) -> 경유지(타 호스트 웹 사이트) -> 최종지(타 호스트 웹 사이트) -> 페이로드(타 호스트 웹 사이트) 이러한 경로로 구성되어있다.

문서에서는 편하게 유포자/악성코드 배포자를 공격자라고 부르겠다.

공격자 특성이 저런식으로 했었는데 당시 나름 추측하기로는 유포지는 굉장히 리스크가 크게 작용하는 것이였다. 뚫는것도 뚫는것이고.. 구지 경유지에 악성코드, 최종지에 악성코드를 넣어 웹 솔루션에 삭제될 바엔 상대적으로 관리가 허술한 개인 홈페이지, 솔루션이 딱히 없는 일반 호스팅에 경유지와 최종지 등을 두고 유포한 것으로 생각했다.

경유지나 최종지, 페이로드 모두 당시에 큰 사이트도 아니였고, 몇 년간 방치돼거나 관리가 허술한 무료 호스팅 서비스로 되어있던 사이트들 이였다.

 

공격자 입장에서도 관리가 허술한 오래된 웹 빌더 또는 플랫폼이 취약점 해킹에 용이했을테니... 그런식으로 유포한것 같다.

아래는 웹 악성코드 유포 당시 찍은 스크린 샷이다.

중국어 학원 사이트, 광고가 왜 저따위인지 모르겠다

마스킹처리가 되어있지만 현 주소에 common.js에서 n2j.js로 연결되는 eval code를 볼 수 있다.

도메인 길이를 보아 서로다른 웹사이트인 것을 알 수 있다.

 

아래는 아이프레임 구조로 삽입된 비 정상 코드

모 스포츠클럽 홈페이지..

이 역시 도메인과 다르게 의심돼는 아이피주소로 이루어진 php링크를 볼 수 있다.

이와 같이 404인 상태 또는 최근 기록이 없는것은 비 정상링크로 구분하여 레거시 링크라 표현하는걸로 기억한다

이와 같은 비정상 코드를 구분해내는게 패턴식, 시그니처 방식의 탐지이다

 

요즘이야 머신러닝으로 학습해서 패턴을 파악하는 반면 이 또한 데이터가 충분히 있어야 학습하여 흔히 말하는 인공지능 악성코드 탐지 시스템이 돼는 것 이다.

패턴이 꽤나 단순하고 의심 링크의 리다이렉션을 따라가 최종적으로 수상한 코드를 탐지해내는 방식이 이전의 방식이였다.

 

참고로 나는 머리가 나쁘므로 머신러닝과 같은 것 보다 내 손과 단순한 머리가 대신 노동을 해줄 것 이다.

 

이전 작성했던 코드를 보면 스토리보드를 작성해놨다

 

참으로 대충써놨다.

악성코드 탐지는 굉장히 단순하면서 코드에서 입력돼는 정보가 많아 복잡할 것도 없다.

단순히 정리하면 페이지 정보 -> 분석 -> 결과 -> 무결성 해시, 웹, 탐지한 url 등등.. 디비에 집어넣는 작업이 더 많다

 

분석 핵심코드 1 첫 번째 들어간 페이지를 먼저 분석한다

우리는 웹사이트를 들어가게돼면 아래와 같은 정보를 받는다

현재 웹 페이지의 응답코드가 200인가 ? -> 예 로드함

현재 페이지가 리다이렉션 하는가 ? -> 예 로드함

웹 페이지 메인에서 로드돼는 html, js, css 등등이 있는가 ? -> 예 로드함

크게보면 위와 같은데 디테일하게 들어가면 귀찮아지니 대충 저정도로 마무리하자.

 

분석코드 1번은 index가 로드될 때 아래와 같은 시그니처를 이용해 탐지해낸다

몹시 단순하다. 정규표현식을 사용하면 더 간단해질 수 있다. (str_md5의 쓰임은 나중에 나온다.. 여기서는 메모용...)

 

공격자 특성상, 대부분의 비정상코드 삽입 유형은 로드돼는 js에 집중되어있다.

 

맨 아래쪽에 위치하거나, 맨 위쪽에 eval코드 또는 쌩 코드로 난독화 하지않고 박아놓는 경우가 있다.

 

그냥 쌩코드로 인덱스나 자바스크립트 파일에 박는경우도 있다.

js 스크립트 파일에 document write로 iframe을 로드하는 모습
js 스크립트 파일에 삽입된 리다이렉션, 네이버 피싱으로 기억한다.

 

이렇게 우리는 각 정보를 받아오고 로컬 도메인 또는 아이피와 다를 경우 먼저 검사 리스트에 올리게 된다.

검사 리스트에 올라온 뒤로는 두번째 분석코드로 내용이 전달된다.

소스가 조금 난해하다, 루프가 총 3개로 돌아간다.

어미루프(최상위 루프)는 받아온 URI를 재 정렬하여 하여 접속과 동시에 두번쨰 루프로 본격적인 분석을 시작하게 된다.

아래는 주요 탐지 코드

눈썰미가 좋거나 뭣좀 안다면 해당 패턴이 얼마나 무식한지 알 수 있다.

위 사진을 보면 ETC_3 컬럼에 설명이 나와있다.

대표적으로 궁금할 수 있는데, bmw;bmw는 실제 ck exploit kit에 탑재된 특정 패턴이다. mini;mini 또한 마찬가지, 이게 약간 익스플로잇 킷에 버전에 따라 다른데, 이전 것이 kaixin 또는 gongda로 불리우던 익스플로잇 킷이 전신이고 기억하기로는 PAC 스크립팅 공격 (2016-0189)이후로 bmw;bmw 패턴을 쓰다가 mini;mini패턴으로 바뀐걸로 알고있다.

해당 변수는 최종적으로 페이로드를 불러오는 부분의 함수... 였는지 기억이안나는데 아무튼 페이로드 로드쪽이였다.

아래는 스크립트 파일 연결 부분..

Base64로 탐지한 패턴을 비교해 알맞은 스크립트를 불러온다

여기서 str_Base64에 해시값을 볼 수 있는데, 저 해시값을 통해 분석 스크립트를 따로 나눴기 때문에 해당 str_Base64에 맞는 스크립트 파일 str_Base64에 맞게 움직인다, 분석 스크립트를 분리해놓은 이유는 차후 변경 또는 새로운 방식으로 변경되었을 때 분석스크립트의 과거 스크립트 보존과 바뀐 스크립트를 구분하기 위함이였다.

ck exploit kit의 패턴인 bmw;bmw를 base64로 인코딩하면 <Ym13O2Jtdwo=>가 된다.. base64를 쓴건 단순히 스크립트 디버깅때 편리를 위해서였다. (나만 볼꺼니까 뭐...)

이런식으로 분석이 끝나면 텔레그램 API와 연동해 알람이 가게 만들었었다.

Ck Exploit Kit 탐지 당시 알람, 취약점 공격과 페이로드가 있다.

추가로 공격자는 공격 링크를 바꾸기도 한다. 앞서 말했듯 공격자는 유포지 -> 경유지 -> 최종지 순으로 악성코드를 구성하기 때문에 경유지가 막히게된다면 다른 경유지로 변경할 수 있기 때문에 호스트를 따로둔다고 했다.

아래는 모니터링하던 페이지에 새로운 링크가 추가된 모습이다

마지막 기록에는 없던 URI가 추가돼면서 의심링크 알람 발생된 모습

해당 링크는 경유지이다. js로 연결하여 최종지로 연결된다.

해당 JS에는 iframe이 있었다.

파싱한 주소는 404 상태였다.

6일정도 지나자 404상태였던 index.html에 새 링크 counter 추가

JS에 연결된 

여기서 해당 링크가 궁금할 수 있는데, 이는 중국에서 서비스중인 방문자 통계 사이트다

공격자는 해당 사이트에 방문자 통계 스크립트를 먼저 삽입하여 '파급력'을 알아보기위해 나름의 분석을 하게된다

뇌피셜이지만 얼마나 많은 수가 접속하여 얼마나 많이 감염될지 간을 보는것, 사실 기정 사실화된 부분이기도 했다

며칠 후 갑작스러운 다른 링크로 변경

host domain에서 다른 domain으로 비정상 링크 변경된 모습

이러한 경우는 공격자가 다른 링크로 변경한 이유는 빠른 차단을 피하기 위함으로 보면 될 것 같다.

경로 변경, /img/n/index.html에서 /img/12/index.html

링크가 한번더 바뀐모습, 이쯤돼면 차단이고 뭐고 공격자 지맘대로기 때문에 수시로 모니터링이 필요하다.

스크립트 로직상 URI를 등록하게돼면 특별관리 대상으로 빠지기떄문에 해당부분은 따로 모니터링하게된다

바로 공격 시작, 오후 시간대 공격을 시작했다.

CK Exploit Kit이 로드된 모습 페이로드는 /gnu/win.exe 기억하자

그 다음날인 13일 5시 7분전, 페이로드 변경 탐지

/gnu/win.exe에서 /law/win.exe로 변경되었다.

페이로드가 변경돼면서 유포돼는 파일 해시역시 바뀌었을 것 이다.

페이로드 파일 해시가 바뀌는건 유포중일때 수시로 바뀌는데 이는 백신이 1차적으로 탐지하는 기준이 데이터가 업데이트된 파일의 해시이기 때문에 많으면 40번정도나 파일해시를 바꾸면서 유포하게된다.

그렇게 다음날 오후시간대쯤 공격 후 하루만에 악성코드가 빠졌다

익스플로잇 킷 악성코드는 사라지고 카운터만 남았다.

카운터를 계속 남겨두는 이유는 공격자가 빼지 않았거나, 추후 추가공격을 할 수 있다는 의미이다.

그렇게 다음날 오후 저녁시간대 재탐지

귀신같이 추가 공격을 진행했다.

CK Exploit kit으로 유포한건 파밍 악성코드, 이후로는 모바일 악성코드로 공격을 실행한다.

다른 유포지에서 업데이트된 얼럿을 보면 14일 오후 3시에 탐지한 유포지

다른 유포지에서 14일 오후 3시에 경유지를 탐지했다

아래는 해당 APK가 유포중인 모바일 접속 결과

다운로드는 역시 APK이다 

당시에는 플래시 보안 업데이트 어플로 유인하여 설치를 요구하는걸로 기억한다.

이후 15일 오후 23시, 다른 URL로 또 다시 변경

또 CK Exploit Kit 일까 ? 신났다 아주

추가공격이 계속됨에따라 모니터링을 계속 했지만 해당 링크에서는 아무것도 나오지 않았다.

이처럼 공격자의 성격을 파악하는게 매우 중요하다

 

글을 쓰다보니 생각보다 코드리뷰보다는 분석내용이 더많았다... 다시 본론으로 돌아가서

 

전반적인 스크립트 작업은 아래 그림처럼 나타난다

마지막으로 돌렸을때 Full URL을 본것같다... 포털사이트라도 들어가면 빠져나오지도 못한다.

악성코드 특성상 다른 호스트의 주소를 넣기때문에 모두 보지않으면 위협을 탐지할 수 없을수도 있다.

이에따른 오탐도 생길테고 리스크가 있으니 대부분의 업체가 1~2 페이지 정도의 depth을 설정해뒀는데 나 역시도 메인페이지로부터 1depth정도로 탐지했던걸로 기억한다 (의심링크나 악성링크는 Full depth !)

 

... 뭐 끝이다. 차라리 코드내용보다 이 글을 보는 사람들은 직접 만들 수 있는사람이 더 많을 것 같으니 분석위주로 올리는게 좋을지도 모르겠다.

 

 

 

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유