보안 2017. 1. 26. 03:34

SW의 안전한 배포를 위한 코드 난독화 기술을 알아볼까요?


 코드 난독화란 치환 및 자리바꿈 등의 기법을 사용해 소스코드를 알아보기 어렵게하는 만드는 기술입니다.

JAVA를 다루는 개발자라면 난독화 기술을 알아둘 필요성이 있습니다. 자바는 JVM(JAVA Virtural Machine)위에서 실행되는 바이트코드 형태로 컴파일되며 컴파일된 코드에는 자바 소스코드 정보가 그대로 포함되어 있어 역컴파일(Decompile)을 쉽게 할 수 있습니다.



난독화가 관심을 받는 이유를 정리해보면

▶ 역공학 방지

Decompiler를 통한 소스코드 분석 방지. 즉, 실행 중인 프로그램은 반드시 메모리에 적재되어야 하고 메모리에 적재된 코드를 Decompiler를 통해 원래의 소스코드로 변환이 가능하다는 이야기죠. 하지만 소스코드가 난독화가 되어있으면 디컴파일된 소스코드를 제대로 분석하기는 어려워요~~ 그래서 솔루션을 판매하는 기업은 핵심 알고리즘 및 라이센스 부분은 반드시 난독화를 적용 후에 판매해야 돈을 벌 수 있을겁니다.

 보안강화

외부 공격 및 통계적 공격에 의한 코드 조작이 어려워 집니다.



난독화는 적용 대상에 따라 소스코드 난독화와 바이너리 난독화로 나누어집니다.

소스코드 난독화는 java, c/c++과 같은 소스코드를 문자열 치환, 자리바꿈 등의 기법을 사용해 소스코드를 읽기 어렵게하는 것이고, 바이너리 난독화는 exe, apk와 같은 실행파일이 대상이며 컴파일 후에 생성된 바이너리의 심볼 정보를 제게 및 변형하여 역공학을 통해 코드를 분석하기 어렵게 만드는 기술입니다.


난독화 적용기법

- 배치 난독화

프로그램에 큰 영향을 끼치지 않는 세부적인 요소들을 변화시키거나 제거하여서, 복원된 프로그램의 내용을 부분적으로 훼손시킴으로써 난독화를 한다. 변수 및 식별자의 이름 변조, 주석제거가 대표적인 방법이다.

- 데이터 난독화

데이터를 담는 변수 str을 str1, str2, str3로 나누거나 합치는 방법을 이용하여 난독화 수행

- 제어난독화

프로그램의 실행순서 및 흐름을 변경하는 것으로 프로그램의 문장이 묶이는 단위를 조절함으로서 난독화 한다

- 방지 난독화

알려진 Decompiler의 역난독화 기법을 봉쇄하여 디컴파일 수행 시 프로그램이 충돌하게 만드는 방법이다. 


소스코드 난독화 적용 시 고려사항

- 난독화에 투입되는 비용과 효과를 분석하여 난독화 범위 및 수준 결정

- 높은 수준의 난독화는 시스템에 부하를 발생시켜 성능이 저하됨

- 난독화된 코드는 보안장비(IDS 등)를 우회할 수 있어 보안관리자 입장에서는 눈을 크게 뜨고 악성코드를 찾아야 겠죠~




'보안' 카테고리의 다른 글

SSL(TLS)란?  (0) 2017.04.13
Ransomware(랜섬웨어)  (1) 2017.01.25
posted by 생각퍼즐
: