2019년 4월 12일
난독화 (Obfuscation)
I. 소프트웨어 보안 위한 난독화의 필요성
필요성 | 설명 |
---|---|
불법 복제 방지 | – 역공학 이용 시리얼 키 및 암/복호화 비교 루틴 우회 방지위해 난독화 통한 복제 방지 |
해킹 방지 | – S/W 취약점 탐지, 취약점 이용 S/W 제공 기능 우회 및 악성코드 제작 사전 방지 |
소프트웨어 경량화 | – 자바 등 소스 코드의 용량 인한 응답 속도 저하 해결 위해 난독화 통한 S/W 경량화 |
II. 역공학 분석 방지 목적 난독화
가. 난독화(Obfuscation)의 개념
- 역공학 이용한 S/W 행위 분석자에게 소스 레벨의 분석을 어렵게 만들기 위한 코드 변형 기법
- T(P)가 프로그램 P에 대한 변환이라 가정 시 T(P)와 P의 동작이 동일 시 T는 난독화 변환
나. 난독화 개념도 및 핵심 절차
절차 | 설명 |
---|---|
분석 작업 | – 입력 소스 코드로부터 어휘와 구문 분석 수행 |
기법 선택 | – 분석 결과를 기반으로 특성에 맞는 기법 선택 |
코드 난독화 수행 | – 소스 코드 수정 없이 난독화 설정 값에 따라 해당 로직을 조합하여 난독화 수행 |
III. 난독화 위한 기술 분류와 비교 설명
가. 난독화 위한 기술 분류
난독화 | 기술 | 설명 |
---|---|---|
Layout | Formatting Change | – 배열 등에 담아 둔 String 등 이용, 포맷 변환으로 코드 분석 난해 |
Remove Comments | – String형식 주석문 제거, Reversing 분석 어렵게 만드는 방법 | |
Scramble Identifiers | – 변수, 식별자 등 이름 변경, Rever-sing 분석 어렵게 만드는 방버 | |
Data | Storage | – 변수를 자르거나 정적 변수를 함수 호출 형식으로 변경 |
Aggregation | – 자료 순서 변환, 하나의 클래스를 분리하는 방법 | |
Control | Computation | – 여러 개의 Loop를 나누거나 합치는 방식 |
Ordering | – Loop Count를 역순으로 사용 | |
Aggregation | – Procedure Inline or Outline 이용 제어 흐름 순서 해석 어렵게 함 | |
Preventive | Targeted | – 알려진 역난독화 방법에 대해 역난독화 프로그램끼리 충돌 |
Inherent | – 역난독화 프로그램에 가짜 데이터 반환하는 방법 |
- 사용자의 실행 속도를 함께 고려하며 보안과 사용성의 Trade-off 관계를 S/W 성격에 맞게 적용 필요
나. 난독화 기술 비교
구분 | Layout | Data | Control | Preventive |
---|---|---|---|---|
특징 | – 세부적 요소 변화, 제거 – 복원 성공 시에도 프로그램 상당 부분 훼손 | – 프로그램 처리 변수의 변환 – 데이터 저장 변수 합치거나 읽기 어렵게 변경 | – 프로그램 문장 단위 조절 – 프로시저 등 변경으로 인한 불명확성을 증대 | – 역난독화에 대한 대응 – 역난독화 프로그램이 구체화된 경우 사용 가능 |
장점 | – 성능 저하 미존재 | – 자료의 보호 | – 로직의 보호 | – 능동적 역공학 방해 |
단점 | – 로직 보호 불가 | – 성능의 저하 | – 성능 저하 | – 성능 저하 |
사례 | 변경 전: Get Payroll() 변경 후: a() | 변경 전: t=”Net”; 변경 후: t[1]=’N’; t[2]=’e’; t[3]=’t’; | 변경 전: for(i=0;i<100;i++) 변경 후: for(i=100;i>0;i++) | – Hardware breakpoint Detection – Detecting breakpoint by CRC |
IV. 주요 난독화 기법
주요 기법 | 설명 |
---|---|
Split Obfuscation | – 가장 간단한 난독화 방법으로 코드를 다수 스트링 변수로 잘게 쪼갠 후 재조립 |
인코딩 함수 | – ASCII 문자로 변환 수행 |
HEX Code | – 주요 코드를 hex, asci, base64 코드로 변환 |
Replace 함수 | – 코드/변수에 복잡한 쓰레기 문자 삽입하여 replace를 이용하여 사용하는 기법 |
생성자 난독화 | – 생성자를 통해 문자열 처리하여 문자 없이 코드 작성 방법 |
Dehydrating a stringTechnique | – 아스키코드로 0x20과 0x09인 스페이스와 수평 탭을 이용하여 코드 보이지 않는 기법 |
One Comment
많은 도움이 되었습니다~^^