본문 바로가기
정보보호 (Security)

소프트웨어 소스코드 난독화(Code Obfuscation) 및 악성코드 탐지 기법

by 날으는물고기 2024. 9. 15.

소프트웨어 소스코드 난독화(Code Obfuscation) 및 악성코드 탐지 기법

728x90

Data Obfuscation : Encryption, Tokenization, Format Preserving Encryption(FPE), Data Scrambling, Data Masking

코드 난독화(Obfuscation)는 소스 코드 또는 기계 코드의 이해를 어렵게 하여 분석이나 리버스 엔지니어링(Reverse Engineering)을 방지하기 위한 기술입니다. 보안성을 높이기 위해 주로 사용되며, 악성 코드나 저작권 보호를 위해서도 사용될 수 있습니다. 코드 난독화는 주로 다음과 같은 기법들을 포함합니다.

주요 난독화 기법

  1. 변수 이름 변경: 의미 없는 이름으로 변수명을 변경하여 코드의 가독성을 낮춥니다.
     # Before
     def add_numbers(a, b):
         result = a + b
         return result
    
     # After
     def x1(x2, x3):
         x4 = x2 + x3
         return x4
  2. 코드 구조 변경: 코드 블록을 재구성하거나 불필요한 코드를 추가하여 코드를 복잡하게 만듭니다.
     # Before
     def check_number(n):
         if n > 10:
             return True
         return False
    
     # After
     def check_number(n):
         if (n - 5) > 5:
             return True
         else:
             return False
  3. 문자열 인코딩: 코드 내의 문자열을 인코딩하여 원래 내용을 숨깁니다.
     # Before
     message = "Hello, World!"
    
     # After
     message = "\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21"
  4. 난독화 도구 사용: 다양한 난독화 도구를 사용하여 자동으로 코드를 난독화합니다.
    • JavaScript 난독화 도구: UglifyJS, JavaScript Obfuscator
    • Python 난독화 도구: PyArmor, PyObfuscate
    • Java 난독화 도구: ProGuard, Zelix KlassMaster

난독화의 장점과 단점

장점

  • 코드 보안성 향상: 코드를 분석하기 어렵게 만들어 리버스 엔지니어링과 디버깅(Debugging)을 방지합니다.
  • 지적 재산 보호: 코드의 도용이나 무단 사용을 어렵게 합니다.

단점

  • 디버깅 및 유지보수 어려움: 코드의 가독성이 떨어져 디버깅과 유지보수가 어려워집니다.
  • 성능 저하: 불필요한 코드가 추가되어 성능이 저하될 수 있습니다.
  • 완벽한 보호 불가능: 난독화된 코드도 충분한 시간과 노력이 투자되면 해독될 수 있습니다.

보안 고려사항

  1. 코드 난독화는 만능이 아님: 난독화는 보안의 한 요소일 뿐, 완벽한 보호를 보장하지 않습니다. 다른 보안 방법과 함께 사용해야 합니다.
  2. 정기적인 난독화 업데이트: 코드가 변경될 때마다 난독화를 업데이트해야 합니다. 새로운 코드가 추가되거나 기존 코드가 변경되면 난독화된 부분도 재적용해야 합니다.
  3. 민감한 데이터 보호: 난독화된 코드 내에 민감한 데이터나 비밀번호를 포함시키지 않도록 주의합니다. 중요한 정보는 별도로 암호화하여 보호합니다.

활용 사례

  • 소프트웨어 배포: 상용 소프트웨어의 소스 코드를 난독화하여 경쟁사나 해커로부터 보호합니다.
  • 웹 애플리케이션: JavaScript 코드를 난독화하여 클라이언트 측에서의 코드 도용을 방지합니다.
  • API 키 보호: API 키나 민감한 정보를 코드 내에서 숨겨 외부 유출을 방지합니다.

 

코드 난독화는 보안성을 높이는 좋은 방법이지만, 다른 보안 수단과 함께 종합적인 보안 전략을 세우는 것이 중요합니다. 악성코드가 난독화되면 전통적인 탐지 방식으로 탐지하기 어려워질 수 있습니다. 이는 난독화가 악성코드의 의도를 숨기고, 코드 분석을 복잡하게 만들기 때문입니다. 이 경우 보안 전문가들은 다양한 방법을 통해 난독화된 악성코드를 탐지하고 분석하려고 합니다.

난독화된 악성코드의 탐지 어려움

  1. 서명 기반 탐지의 한계
    • 변수 및 함수명 변경: 악성코드는 변수명과 함수명을 무의미하게 변경하여 기존 서명 기반 탐지 시스템에서 쉽게 발견되지 않도록 합니다.
    • 코드 인젝션 및 혼합: 난독화된 코드는 정해진 패턴을 숨기기 위해 불필요한 코드나 난해한 구조를 추가하여 패턴 인식을 어렵게 만듭니다.
    • 문자열 인코딩 및 암호화: 악성코드는 중요한 문자열을 인코딩하거나 암호화하여 쉽게 읽히지 않게 만듭니다.
  2. 행위 기반 탐지의 어려움
    • 동적 코드 생성: 런타임 시점에 코드가 동적으로 생성되거나 실행되면 정적 분석만으로는 탐지가 어렵습니다.
    • 환경 의존적 코드 실행: 특정 환경에서만 작동하도록 설계된 코드는 일반적인 테스트 환경에서 탐지가 어려울 수 있습니다.

난독화된 악성코드 탐지 기법

  1. 정적 분석
    • 역공학 도구 사용: IDA Pro, Ghidra 같은 역공학 도구를 사용하여 난독화된 코드를 분석합니다.
    • 패턴 인식 및 특징 추출: 코드를 디스어셈블리하여 특정 패턴이나 특징을 추출하고, 이를 기반으로 악성 여부를 판단합니다.
  2. 동적 분석
    • 샌드박스 환경: 가상 머신이나 샌드박스 환경에서 코드를 실행하여 행위를 관찰하고 분석합니다. 예: Cuckoo Sandbox
    • 행위 모니터링: 코드 실행 중 시스템 콜, 네트워크 활동, 파일 시스템 접근 등을 모니터링하여 악성 행위를 탐지합니다.
  3. 휴리스틱 및 머신러닝
    • 휴리스틱 분석: 알려진 패턴 외에 이상한 행동이나 코드의 비정상적인 특성을 탐지합니다.
    • 머신러닝 모델: 대량의 정상 및 악성 데이터를 학습한 모델을 통해 난독화된 코드의 이상 징후를 탐지합니다.

난독화된 악성코드의 분석 예시

  1. JavaScript 난독화
    • 난독화된 JavaScript 코드를 분석할 때는 원본 형태로 복원하는 디코더를 사용하거나, 브라우저의 디버거를 통해 실행 흐름을 추적합니다.
    • 예시
        // 난독화된 코드
        var _0x5d8d=["\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64"];console['\x6C\x6F\x67'](_0x5d8d[0]);
      
        // 복원된 코드
        console.log('hello world');
  2. Python 난독화
    • PyArmor나 PyObfuscate로 난독화된 Python 코드를 분석할 때는 디컴파일러를 사용하거나, 실행 흐름을 트레이스하여 원본 코드를 복원합니다.
    • 예시
        # 난독화된 코드
        def x1(x2, x3):
            x4 = x2 + x3
            return x4
      
        # 원본 코드
        def add_numbers(a, b):
            result = a + b
            return result

난독화된 악성코드에 대한 대응 전략

  1. 멀티레이어 보안: 정적 분석, 동적 분석, 행위 기반 분석을 통합하여 다양한 탐지 방식을 적용합니다.
  2. 위협 인텔리전스: 최신 위협 정보를 지속적으로 수집하고, 이를 기반으로 탐지 규칙을 업데이트합니다.
  3. 사용자 교육: 직원들에게 악성코드와 피싱 공격에 대한 인식을 높이고, 의심스러운 파일이나 링크를 클릭하지 않도록 교육합니다.
  4. 자동화된 대응 시스템: 탐지된 위협에 대해 자동으로 대응하는 시스템을 구축하여 신속하게 대응할 수 있도록 합니다.

난독화된 악성코드를 효과적으로 탐지하고 대응하기 위해서는 다양한 분석 기법과 최신 보안 정보를 활용하는 것이 중요합니다. 또한, 보안 시스템의 지속적인 업데이트와 사용자 교육을 통해 전반적인 보안 수준을 향상시켜야 합니다. 난독화된 악성코드를 탐지하고 대응하기 위한 전략은 다양한 분석 기법과 도구들을 통합하여 다층적인 접근 방식을 적용하는 것이 중요합니다. 아래는 보다 구체적인 탐지 및 대응 전략과 관련 도구들을 설명합니다.

탐지 전략

  1. 정적 분석 (Static Analysis)
    • 역공학 도구 사용: 난독화된 바이너리나 소스 코드를 분석하기 위해 역공학 도구를 사용합니다.
      • IDA Pro: 디스어셈블러 및 디버거로, 복잡한 바이너리를 분석하는 데 유용합니다.
      • Ghidra: 미국 NSA에서 개발한 오픈소스 역공학 도구로, 디컴파일 기능을 제공합니다.
      • Binary Ninja: 정적 분석을 위한 상용 도구로, 스크립팅과 자동화 기능을 지원합니다.
    • 소스 코드 난독화 해제: 난독화된 소스 코드를 복원하여 분석합니다.
      • de4dot: .NET 코드의 난독화를 해제하는 도구입니다.
      • Java Deobfuscator: Java 클래스 파일의 난독화를 해제하는 데 사용됩니다.
  2. 동적 분석 (Dynamic Analysis)
    • 샌드박스 환경: 악성코드를 격리된 환경에서 실행하여 행위를 분석합니다.
      • Cuckoo Sandbox: 오픈소스 샌드박스 도구로, 악성코드를 자동으로 분석하고 보고서를 생성합니다.
      • Joe Sandbox: 상용 샌드박스 솔루션으로, 다양한 운영 체제와 환경에서 악성코드를 분석할 수 있습니다.
    • 행위 기반 모니터링: 악성코드 실행 중 발생하는 시스템 호출, 네트워크 활동 등을 모니터링합니다.
      • Sysinternals Suite: Windows 환경에서 프로세스 모니터링, 파일 시스템 활동, 레지스트리 변경 등을 추적할 수 있는 도구 모음입니다.
      • strace: Linux에서 시스템 호출을 추적하는 도구입니다.
      • Wireshark: 네트워크 트래픽을 분석하여 악성 활동을 탐지하는 도구입니다.
  3. 휴리스틱 및 머신러닝 기반 분석
    • 휴리스틱 분석: 알려진 서명 기반 탐지 외에 비정상적인 행동 패턴을 탐지합니다.
      • YARA: 파일, 프로세스, 메모리에서 악성코드 패턴을 탐지하는 규칙 기반 도구입니다.
    • 머신러닝 모델: 정상 및 악성 코드의 특징을 학습한 모델을 통해 이상 징후를 탐지합니다.
      • Malware Detection Models: sklearn, TensorFlow, PyTorch 등을 사용하여 머신러닝 모델을 개발하고 악성코드 탐지에 적용합니다.

대응 전략

  1. 자동화된 대응 시스템 구축
    • SOAR (Security Orchestration, Automation, and Response): 보안 인시던트에 대한 자동화된 대응 및 조치를 구현합니다.
      • Splunk Phantom: 다양한 보안 도구를 통합하여 자동화된 대응을 제공하는 SOAR 플랫폼입니다.
      • IBM Resilient: 인시던트 대응을 자동화하고, 워크플로우를 관리하는 SOAR 솔루션입니다.
    • SIEM (Security Information and Event Management): 실시간 보안 모니터링 및 이벤트 관리를 통해 신속하게 대응합니다.
      • Splunk: 대규모 데이터의 실시간 분석과 인시던트 대응을 위한 SIEM 도구입니다.
      • Elastic Stack (ELK): Elasticsearch, Logstash, Kibana로 구성된 오픈소스 SIEM 솔루션입니다.
  2. 위협 인텔리전스 활용
    • Threat Intelligence Platforms: 최신 위협 정보를 수집하고 분석하여 보안 시스템에 반영합니다.
      • MISP (Malware Information Sharing Platform): 악성코드 관련 정보를 공유하고 협업하기 위한 플랫폼입니다.
      • ThreatConnect: 위협 인텔리전스 데이터를 수집, 분석, 공유하여 보안 운영을 강화하는 플랫폼입니다.
    • 실시간 업데이트: 위협 인텔리전스 데이터를 실시간으로 보안 시스템에 반영하여 최신 위협에 대응합니다.
  3. 사용자 교육 및 보안 인식 제고
    • 보안 교육 프로그램: 직원들에게 정기적인 보안 교육을 실시하여 악성코드와 피싱 공격에 대한 인식을 높입니다.
      • KnowBe4: 피싱 시뮬레이션과 보안 교육을 제공하는 플랫폼입니다.
      • SANS Security Awareness Training: 다양한 보안 교육 과정을 제공하는 프로그램입니다.
    • 보안 캠페인: 회사 내 보안 인식을 높이기 위한 캠페인을 진행합니다.
      • 정기적인 뉴스레터 발송, 포스터 배포, 보안 퀴즈 등
  4. 최소 권한 원칙 적용
    • 접근 제어: 최소 권한 원칙을 적용하여 불필요한 권한을 제한하고, 권한 상승 공격을 방지합니다.
      • Role-Based Access Control (RBAC): 역할 기반으로 접근 권한을 관리하는 방법입니다.
      • Least Privilege: 각 사용자나 프로세스가 작업을 수행하는 데 필요한 최소한의 권한만을 부여합니다.
  5. 취약점 관리
    • 정기적인 취약점 스캔: 정기적으로 시스템의 취약점을 스캔하고, 발견된 취약점을 신속하게 패치합니다.
      • Nessus: 네트워크와 시스템의 취약점을 스캔하는 도구입니다.
      • OpenVAS: 오픈소스 취약점 스캐너로, 다양한 네트워크 서비스의 취약점을 탐지합니다.
    • 패치 관리 시스템: 시스템과 소프트웨어의 최신 패치를 관리하고 적용합니다.
      • WSUS (Windows Server Update Services): Windows 서버에서 패치를 관리하고 배포하는 도구입니다.
      • Chef, Puppet, Ansible: 자동화된 구성 관리 도구로, 패치 관리에도 사용됩니다.

이와 같은 다층적인 탐지 및 대응 전략을 통해 난독화된 악성코드로부터 시스템을 보호할 수 있습니다. 각 전략과 도구를 상황에 맞게 적절히 조합하여 사용함으로써 보안성을 극대화할 수 있습니다.

 

난독화(Obfuscation)는 악성코드 분석 및 보안 분석의 가장 큰 장애물 중 하나로, 악성코드 제작자가 코드의 분석과 탐지를 어렵게 만들기 위해 사용하는 기법입니다. ANY.RUN 플랫폼은 동적 분석을 통해 난독화된 악성코드를 효과적으로 분석할 수 있으며, 이를 활용하여 난독화 분석을 수행하는 방법입니다. ANY.RUN은 특히 동적 분석의 장점을 적극 활용하여 난독화 기법을 실시간으로 풀어나가는 도구로써 적합합니다.

ANY.RUN을 통한 난독화 분석 단계별 접근법

(1) 파일 및 환경 설정

  • 분석 대상(난독화된 파일)을 app.any.run 에 업로드합니다.
  • 가상 환경 선택 (Windows 7/10, Office 등), 네트워크 환경 설정(인터넷 활성화/비활성화) 등을 구성합니다.

권장
난독화된 악성코드는 환경 의존성이 높으므로 기본 인터넷 활성화 상태로 분석 수행 권장.

(2) 초기 실행 및 행동 관찰

  • 파일을 VM에서 실행한 후 초기 행위를 실시간 모니터링 합니다.
  • 난독화 코드가 일반적으로 보이는 특징적인 행동(예: DLL 인젝션, 자가 복제, 임시파일 생성 등)을 기록합니다.

(3) 문자열(String) 및 API 호출 분석

  • 난독화 기법 중 흔한 형태가 문자열 암호화입니다. ANY.RUN을 활용하여 런타임에 복호화되는 문자열을 식별할 수 있습니다.
    • 프로세스의 네트워크 연결 요청(IP/도메인 등)
    • 파일 및 레지스트리 키 값 변경
    • 동적으로 생성되는 API 호출 흐름 및 문자열

(4) 패킹된 파일 동적 추출 및 메모리 덤프

  • 난독화 기법 중 가장 흔히 쓰이는 것이 패킹으로, 코드가 실행되는 시점에 메모리에 원본 코드가 해제됩니다.
  • ANY.RUN의 메모리 덤프 및 파일 드롭(File drop) 기능을 이용하여 런타임 중 압축 해제된 원본 바이너리를 확보합니다.
  • 확보한 원본 바이너리를 추가 정적 분석 도구(IDA Pro, Ghidra)로 분석할 수 있습니다.

(5) 안티-분석(Anti-Analysis) 기법 식별

  • ANY.RUN에서 분석 시 악성코드가 안티-디버깅, 안티-VM 기법을 사용하는지 즉각적으로 확인 가능합니다.
  • VM 환경을 감지할 경우 동작이 달라지거나 즉시 종료되는 프로세스 트리를 분석하여 난독화 방식의 한계를 식별합니다.
  • 환경 회피 기법 대응: VM 속성 변경, 네트워크 환경 재구성 후 재분석

난독화 분석 시 ANY.RUN의 주요 활용 기능

기능 활용 방안 및 이유
프로세스 트리(Process Tree) 난독화된 코드의 실행 흐름을 명확하게 시각화하여 제어 흐름 난독화 탐지
네트워크 모니터링(Network Activity) 복호화된 C2 주소 및 의심 URL, IP 확인
파일 시스템 및 레지스트리 변경 내역 난독화로 숨겨진 악성 동작(파일 드롭, 설정 변경 등)을 즉시 확인 가능
메모리 덤프 패킹 해제된 원본 코드 확보
스크린샷(Screenshot) 동작 중 GUI 기반 난독화 기법의 행위 식별
IOC 자동 추출 분석된 악성코드의 IOC를 즉시 내부 위협 탐지 시스템에 적용

✅ 가이드라인

  • 의심 파일이나 메일 첨부파일은 반드시 샌드박스 환경에서 우선 실행
  • 패킹, 문자열 암호화 등의 난독화는 반드시 동적 분석(ANY.RUN)으로 접근
  • 메모리 덤프나 파일 드롭이 발생할 경우 이를 반드시 2차 분석(정적 분석도구) 진행
  • ANY.RUN 분석 결과의 IOC를 조직 내부 탐지 시스템(SIEM, MISP)에 즉시 반영하여 탐지 효율화

✅ 점검 포인트 체크리스트

  • 난독화 코드의 실행 후 메모리 덤프 여부 확인
  • 난독화 후 복호화된 문자열(URL, IP, 명령 등) 명확히 기록
  • C2(명령 제어 서버)와의 연결 시도 및 IP/도메인 기록
  • 악성코드가 사용하는 안티 분석 기법 존재 여부 체크
  • 메모리 덤프나 드롭 파일을 확보하여 별도의 정적 분석 수행 여부

ANY.RUN API를 활용한 분석 자동화 (기술적 접근)

  • 반복적 난독화 분석의 효율성을 높이기 위해 ANY.RUN API를 활용한 자동 분석 체계를 구축할 수 있습니다.

API 활용 예시 (curl 기반)

분석 작업 요청 예시

curl -X POST \
  https://api.any.run/v1/analysis \
  -H 'Authorization: API-KEY-HERE' \
  -F 'file=@malicious_file.exe' \
  -F 'os=windows-10' \
  -F 'network=true'
  • 난독화 분석이 반복적으로 필요한 경우 n8n이나 Python 스크립트로 연동하여 자동화된 악성 분석 파이프라인 구축 가능

 

ANY.RUN을 활용한 난독화 분석은,

  • 동적 환경에서 실시간으로 난독화를 풀고
  • 시각적인 분석을 통해 신속하게 대응책을 마련하는 데 매우 효과적입니다.

 

이를 통해 조직은 보다 빠르고 정확하게 위협의 본질을 이해하고 대응 전략을 수립할 수 있으며, 난독화된 악성코드로 인한 위협 탐지 및 예방 능력을 크게 향상시킬 수 있습니다. 주로 보안 분석가, 리버스 엔지니어, 위협 인텔리전스 팀 등에서 사용되며, 다양한 형태의 악성 행위를 시각화하고, 네트워크, 프로세스, 레지스트리, 파일 시스템 등의 변경 사항을 추적할 수 있는 기능을 제공합니다.

📁 파일 및 URL 샌드박스 실행

  • EXE, DOC, XLS, PDF, JS, HTA, ZIP 등 다양한 형식의 파일 업로드 가능
  • URL 입력을 통한 피싱, 드라이브 바이 다운로드 분석 가능
  • 가상머신(VM)에서 마우스/키보드 조작도 가능 (웹 기반으로 직접 조작함)

📊 실시간 분석 결과 제공

  • 프로세스 트리: 악성코드 실행 중 생성된 모든 프로세스를 시각적으로 표현
  • 네트워크 요청: DNS, HTTP, TCP 등 모든 트래픽을 캡처 및 분석
  • 레지스트리 변경: 감염 시 생성/변경되는 레지스트리 키 확인
  • 파일시스템 변경: 생성된 악성 파일, 드롭 파일 등 확인
  • 스크린샷: 악성코드 실행 중 VM 화면 캡처 제공

🔄 자동 보고서

  • MITRE ATT&CK 매핑
  • IOC (Indicator of Compromise) 자동 수집
  • JSON, PDF, MISP 포맷으로 추출 가능

🤖 연동 기능

  • API 제공: 자동화된 분석 연동 가능
  • Threat Intelligence 시스템과 연계 (MISP, TheHive, SIEM 등)
  • YARA 룰, Sigma 룰 적용 가능 (유료 계정 기준)

✅ 가이드 및 점검포인트

항목 설명
내부 이메일 첨부파일 분석 의심스러운 이메일 첨부파일을 수집하여 ANY.RUN에서 실행 후 행동 분석
실시간 C2(명령제어) 확인 악성코드가 연결 시도하는 외부 서버(C2) 도메인/IP 즉시 확인 가능
사용자 교육 자료 제작 악성코드의 동작(예: 실행 시 암호화, 백도어 설치)을 시각적으로 보여주는 자료 생성
YARA 룰 기반 탐지 강화 ANY.RUN에서 확인된 특이 행동 기반으로 YARA 룰 작성 후 내부 탐지에 반영
MISP 연동을 통한 인텔리전스 통합 분석 결과의 IOC를 내부 MISP 인스턴스에 자동 수집해 위협정보로 활용 가능

유사 서비스 비교

서비스 특징
Joe Sandbox 정적+동적 분석 통합, 복잡한 리포트 제공, 다양한 OS 지원
Hybrid Analysis (Falcon Sandbox) 커뮤니티 중심, 정적 분석 강점
VMRay 탐지 회피 악성코드 분석에 강함, 에이전트리스 방식
Any.run 가장 직관적인 UI와 실시간 조작이 가능, 빠르고 시각적 분석에 강점

간단 사용 방법

📌 파일 업로드 및 분석

  1. https://app.any.run 접속
  2. "New Task" 클릭
  3. 파일 업로드 또는 URL 입력
  4. VM 유형 및 언어 설정
  5. "Run" 클릭 → 샌드박스 실행 및 실시간 분석 확인

📌 IOC 수집

분석 완료 후

  • "IOC" 탭에서 도메인, IP, 해시값, URL 등 확인
  • JSON, STIX, MISP 포맷으로 다운로드

 

ANY.RUN은 악성코드 분석이 필요한 보안 담당자에게 매우 직관적이고 실시간성 높은 도구입니다.

내부 보안 조직에서 다음과 같은 용도로 적극 활용 가능합니다.

  • 악성 파일/URL 의심 건 실시간 분석 및 대응
  • 위협 헌팅 자료 기반 확보 (IOC)
  • 시각적 악성 행위 리포트로 사용자 교육 및 의사결정 지원
  • SIEM, MISP 연동을 통한 인텔리전스 자동화

 

필요 시, 자체 시스템(n8n, SIEM 등)과 연동하여 자동화된 악성 분석/대응 체계도 설계할 수 있습니다.

728x90
그리드형

댓글