훈훈훈
자바스크립트(JavaScript) 난독화 개념 & 실습 본문
이번에는 JavaScript 난독화에 대해 다루어볼려고 한다.
난독화는 소스 코드를 보호하는 목적으로 사용한다.
하지만 때론 이 기법이 악의적인 목적으로 사용될 경우 악성코드를 보호하는 기술로 이용된다.
그렇기 때문에 악성코드를 분석하는 입장에서 난독화된 코드를 해석하는 기법은 매우 중요하다고 할 수 있다.
이제 난독화가 무엇인지 어떻게 진행하는지 살펴보자.
- 난독화란 ?
: 컴퓨터는 이해할 수 있지만, 사람이 코드를 보았을떄 이해하기 어려운 수준으로
만드는 것이라 정의할 수 있다.
- 난독화의 목적
1) 보안 장비 우회
2) 분석 난이도 증가 -> 분석 시간 지연
3) 결과적으로 악성코드 배포 기간 연장
- JavaScript를 이용한 난독화 실습
: 이제 JaveScript를 사용해서 난독화 실습을 하려고 한다.
실습에 사용할 코드는 최대한 간단한 코드를 사용하였다
밑에 사진에 있는 코드로 난독화 대상인 "test.html" 파일을 만들었다.
<test.html>
실행시 "obfuscation"(난독화) 라는 메시지 박스를 띄우는 파일인 "test.html"을 만들었다.
<test.html 실행화면>
test.html을 실행 시켰을때 다음 사진과 같은 메시지박스가 출력되는 것을 확인할 수 있다.
1) Compression
: JaveScript는 들여쓰기를 지원하지 않기 때문에 한 줄로 표현이 가능하다.
<test1.html>
"test.html" 파일 코드에서 공백을 없애 "test1.html" 파일을 만들었다.
"test1.html" 파일이 코드 수정 이전과 같이 동작하는지 확인해보자.
<test1.html 실행화면>
"test1.html"을 실행시켰을때 "test.html"과 똑같이 동작하는 것을 확인할 수 있다.
2) function Expression
: 함수를 이용해서 가독성을 떨어뜨려 보자.
<test2.html>
"test1.html" 코드에 "var n = function()" 코드를 추가하여 "test2.html" 파일을 만들었다.
이전과 같이 파일 실행시 "test1.html" 코드와 같이 동작하는지 확인해보자.
<test2.html 실행화면>
"test2.html" 실행시 "test1.html"과 같이 동작하는 것을 확인할 수 있다.
3) Data Splite
: 소스코드를 무작위로 분할하여 각각의 변수에 저장한 후 마지막에 실행시킨다.
( 주의: : 공백이 있는 부분을 분할하면 안된다. )
<test3.html - 1>
"test2.html" 코드에서 무작위로 분할한 후 "var a1" to "var a4" 에 각각 초기화 시켰다.
이 코드는 이해 못할 정도의 수준의 코드가 아니기 때문에 한단계를 더 진행하자.
<test3.html - 2>
<test3.html - 2> 그림은 <test3.html -1> 코드에서 공백을 없앤 코드이다.
공백만 없앴을 뿐인데도 코드를 이해하기 어려운 것을 확인할 수 있다.
<test3.html 실행화면>
"test3.html"을 실행시킨 결과 이전과 똑같이 동작하는 것을 확인할 수 있다.
4) Data replace
: 코드를 이해하기 어렵게하기 위해 의미없는 코드들을 삽입 후 나중에 모드 제거하는 기법이다.
<test4.html - 1>
<test3.html - 1> 코드에 "WavesLab"이란 의미없는 코드를 무작위로 삽입시킨 후
마지막에 제거를하는 코드를 삽입하여 "test4.html" 파일을 만들었다.
의미없는 코드를 랜덤하게 삽입 했기때문에 한눈에 코드를 이해하기는 매우 힘들다.
이제 "test3.html" 처럼 공백을 없애보자.
<test4.html - 2>
<test4.html - 1>에서 공백을 없애 <test4.html - 2>를 만들었다.
"test3.html"과 마찬가지로 코드를 한눈에 이해하기 힘들다.
이제 "test4.html"을 실행시켜보자
<test4.html 실행화면>
이전 파일과 똑같이 동작하는 것을 확인할 수 있다.
5) Date Encoding
: 소스 코드 인코딩을 통해 코드를 이해하기 어렵게 만드는 기법이다.
<test5.html>
<test4.html - 1> 을 URL 인코딩을 통해 "test5.html>"를 생성했다.
단지 인코딩 과정만 거쳤을 뿐인데 이전 코드와는 다르게 디코딩과정을 거치지 않는 이상 이해하기 매우 어려운 수준이 되었다.
이제 해당 코드를 실행시켜보자.
"test5.html"을 실행한 결과 이전 파일과 같은 동작을 하는 것을 확인 할 수 있다.
- 결론
: 지금까지 JavaScript를 이용한 난독화에 대해 간단히 살펴보았다.
처음 시작은 간단한 메시지박스를 출력하는 코드로 누구나 이해할 수 있는 코드였지만
난독화 과정을 통해 똑같이 동작하는 코드이지만 한눈에 이해하기 어려운 코드가 되었다.
복잡한 코드가 난독화 되었을 경우 더욱 해석하기 힘들 것이다..
'정보보안 > 악성코드' 카테고리의 다른 글
부트 바이러스 : 미켈란젤로 바이러스 정적 분석 (0) | 2018.11.09 |
---|---|
Mini-100 바이러스 분석 (0) | 2018.10.30 |
Keylogger 기초 분석 (0) | 2018.10.08 |