악성코드 분석이란?
목차:
많은 아이들이 물건을 부수는 이유는 그들이 작은 악마 같은 생물들이기 때문이 아니라 ‘어떻게 만들어졌는가’에 대해 궁금하기 때문입니다. 결국, 그 아이들 중 일부는 자라서 사이버보안 분석가가 됩니다. 그들은 기본적으로 같은 일을 하지만 성인의 세계에서 합니다.
악성코드 분석 은 악성코드 샘플을 연구하여 그것이 무엇으로 구성되어 있고 어떻게 작동하는지를 이해하는 과정입니다. 때로는 시도하지 않으면 알 수 없기 때문에 실제로 악성코드를 실행해야 합니다. 그리고 때로는 실행을 유발하지 않고 코드의 모든 라인을 철저히 조사해야 할 필요가 있습니다.
물론, 악성코드 분석이 무엇인지 배우는 것은 많은 이점을 가져옵니다. 적을 아는 것은 이기는 방법을 아는 것을 의미합니다. 이는 악성코드 연구자가 SOC 팀을 도와 더 목표지향적인 탐지 알고리즘을 개발하고 사건 대응을 개선하는 데 도움을 줍니다.
흥미로운 점은 현대의 악성코드가 점점 더 정교해지고 있다는 것입니다. 종종 보안 분석가는 접근할 수 없는 무언가를 연구해야 합니다. 10년 전에는 악성코드가 하나의 실행 파일로 정의될 수 있었지만, 지금은 하나의 파일이 여정의 시작일 뿐입니다. 악성코드 분석에 좀 더 깊이 들어가서 어떻게 하는지 살펴보겠습니다.
어떻게 악성코드 분석을 시작할 수 있을까요?
간단합니다 – 악성코드 샘플을 획득하면 악성코드 분석을 시작할 수 있습니다. ‘심층 방어’ 접근 방식을 사용하는 조직은 정기적으로 새로운 샘플을 찾기 위해 여러 도구와 프로세스를 보유하고 있습니다. 일부 분석가는 몇 년 동안 개념적으로 새로운 것을 본 적이 없다고 말할 것입니다. 반면, 다른 사람들은 매달 새로운 악성코드 샘플을 보유하고 있다고 인정할 것입니다. 이는 연구의 깊이에 크게 좌우됩니다.
악성코드 분석은 많은 시간 소모할 수 있기 때문에 많은 SOC 팀은 그러한 깊이까지 가지 않는 것을 선호합니다. 하지만 연구에 투자한 시간은 항상 값진 결과를 가져오기 때문에 보안 태세를 개선하는 데 늦지 않습니다.
악성코드 분석의 종류는 무엇인가요?
악성코드 분석은 다양한 방법으로 다양한 도구를 사용하여 수행될 수 있습니다. 세 가지 주요 분석 유형이 있습니다:
- 정적(static)
- 동적(dynamic)
- 하이브리드(hybrid)
보유하고 있는 악성코드를 분석하는 방법을 알아내기 위해서는 먼저 몇 가지 질문에 답해 보세요:
- 이 악성코드는 어떻게 실행을 유발할 수 있을까요?
- 어떤 방식으로 탐지를 회피하려고 할까요?
- 악성 코드의 어느 부분을 볼 수 있고 보지 못하나요?
- 주어진 악성코드 샘플의 모든 측면을 분석하는 데 도움이 될 도구는 무엇입니까?
만약 악성 파일의 샘플을 가지고 있다면, 정적 분석을 수행할 수 있습니다. 하지만 이 파일이 킬체인의 다음 단계들을 실행하는 데만 설계되었다면, 정적 분석은 주요 페이로드가 어떻게 실행되는지 보여주지 않습니다. 때로는 이것을 알기 위한 유일한 방법은 안전한 환경에서 악성코드를 실행하는 것입니다. 그래서 다양한 유형의 악성코드 분석 방법을 수행하는 방법과 사이버보안 분석가에게 어떻게 유용할 수 있는지 살펴보겠습니다.
동적 악성코드 분석
동적 악성코드 분석 은 자동화된 샌드박스에서 수행하거나 샘플을 수동으로 테스트할 수 있는 VM에서 수행할 수 있습니다. 정교한 악성코드는 에뮬레이션된 환경의 흔적을 찾으려 하기 때문에 자동 악성코드 분석은 이 경우 최선의 선택이 아닙니다.
다른 소프트웨어와 마찬가지로 악성코드는 코드가 할 수 있는 거의 모든 것을 수행하도록 프로그래밍될 수 있습니다. 따라서 코드(명령어 집합)가 무엇을 하며 그 논리가 무엇인지를 이해하고 싶습니다.
예를 들어, 일부 보안 도구는 DLL을 로컬 프로세스에 주입합니다. 악성코드는 환경을 검사하고 이러한 파일을 찾으면 스스로 종료합니다. 이외에도 악성코드 스캐너는 다음을 찾을 것입니다:
- 디버거 및 대화형 분석에 사용되는 기타 도구(API 호출 예: IsDebuggerPresent, CheckRemoteDebuggerPresent, NtQueryInformationProcess).
- 프로세스, 창, 레지스트리 키, 파일, 뮤텍스 객체 등 악성코드 분석에 사용됨.
이름에서 알 수 있듯이, 동적 악성코드 분석은 악성코드가 실제로 어떻게 작동하는지 관찰하는 것입니다. 가능한 한 많은 방식으로 상호 작용하여 그 기능성을 완전하게 파악하고자 합니다. 이를 위해서는 완전히 격리된 환경을 사용해야 합니다. 인터넷에 연결되어 있지 않고, 호스트 전용 네트워크에서 실행되어야 하며, VM은 호스트와 폴더를 공유하지 않아야 합니다.
디버거 회피 스캐너가 많은 악성코드 샘플에 존재하고 있지만, 보안 연구원들은 동적 악성코드 분석에서 여전히 디버거를 사용합니다. 이러한 도구는 위험한 API 호출 및 메모리 할당을 식별하는 데 유용합니다. 악성코드가 파일리스 기술을 적극적으로 사용하는 경우, 정적 분석에서는 보이지 않습니다. 왜냐하면 이는 합법적인 프로세스를 통해 작동하기 때문입니다 – 익스플로잇이 필요하지 않습니다.
예를 들어, PowerShell에 주입된 코드는 powershell.exe에 메모리를 할당한 후 새로운 스레드에서 난독화된 코드를 실행합니다 (신뢰할 수 있는 프로세스를 통해 생성됨 )):
디버거 안에서는 코드가 실행하도록 프로그램된 모든 명령어를 통과하는 방식을 볼 수 있게 됩니다. 메모리의 문자열을 확인하고 이러한 메모리 상호작용을 담당하는 코드와 비교하는 것을 잊지 마세요. 주입 API를 찾으세요, 예를 들어 VirtualAlloc, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread등. 또한, NTFS 트랜잭션을 검사하여 프로세스 도플갱잉 주입을 확인합니다.
탐지를 회피하는 악성코드를 분석할 수 있도록 디버거 숨김 도구를 사용하세요. 이제 정적 악성코드 분석을 수행하는 방법에 대해 이야기해봅시다.
정적 악성코드 분석
정적 악성코드 분석 은 코드를 실행하지 않고 수행할 수 있는 분석 유형입니다. 이 유형의 분석은 저수준 소프트웨어 언어, 프로세서 명령어, 메모리 관리 원칙에 대한 고급 지식이 필요할 수 있습니다.
그러나 초급 분석가들도 파일을 정적으로 분석할 방법이 있습니다. 예를 들어, 파일 확장자 를 한 번 보는 것만으로도 어떤 종류의 파일인지 알 수 있으며, 이를 통해 해당 파일을 발견한 위치에서 이 파일이 있는 것이 의심스러운지 여부를 제안할 수 있습니다. 다음으로, VirusTotal과 같은 위협 인텔리전스 리소스에서 해시 또는 퍼지 해시를 검색할 수 있습니다. 그러나 가정할 때는 주의해야 합니다. 해시가 VirusTotal에 없다고 하더라도 파일이 악성일 가능성이 여전히 있기 때문입니다. 다른 정적 속성, 예를 들어 헤더 정보도 분석하는 것을 잊지 마세요.
정적 분석은 초기 평가를 위한 자동화 도구, 더 구체적인 분석을 위한 수동 분석 도구를 통해 수행할 수 있습니다. 보안 분석가는 코드 명령어, 종속성 및 그 의미를 연구합니다.
메모장에서 실행 파일을 열면 다음과 같이 보일 것입니다:
이는 기계가 읽을 수 있는 형식으로 컴파일된 코드입니다. 프로세서는 무엇을 해야 할지 알지만, 인간은 여기에 뭔가를 이해하기가 쉽지 않습니다. 이 코드를 다시 읽고 분석할 수 있는 형식으로 되돌리기 위해서는 디스어셈블러나 디컴파일러를 사용해야 합니다. 그러면 코드는 다음과 같은 모양을 가질 것입니다:
어셈블리 명령어를 이해하는 것은 통찰력 있는 결론을 내리는 데 필요합니다. 이 짧은 가이드를 참고하여 지식을 새롭게 하거나 Oracle의 레퍼런스 매뉴얼 을 통해 더 깊이 있는 학습을 하세요.
Microsoft의 Sysinternals 모음을 사용하여 문자열을 분석할 수도 있습니다. 이 도구들은 특정 Windows API 호출과 연결된 실행 파일을 식별하고 IOC(지표)를 결정하는 데 도움이 될 수 있습니다. 이 블로그 게시물의 마지막 부분으로 이동하여 악성코드 분석 도구에 대해 더 알아보세요. 이제 정적 분석과 동적 악성코드 분석의 장단점에 대해 이야기해봅시다.
정적 vs 동적 악성코드 분석
분명히, 한 가지 이상의 악성코드 분석 유형을 사용하는 것이 최선의 선택일 것입니다. 정적 분석은 특정 실행 파일이 어떻게 작동하는지를 보여줄 것입니다. 반면, 최근 표준 킬 체인은 종종 둘 이상의 실행 파일을 포함합니다. 대신에, 서로를 유발하는 스크립트와 파일의 모음이 될 수 있습니다. 그렇다면, 파일 중 하나에 대한 정적 분석만으로는 전체 페이로드가 어떻게 작동하는지를 이해하는 데 충분하지 않을 것입니다.
SOC 팀의 목표와 목적에 따라, 악성코드 샘플 연구에 자원이 투입될 수 있습니다. 그리고 정적 분석이나 동적 분석으로 갈 것인지에 대한 선택은 매우 개별적입니다. 대부분의 경우, 정적 분석과 동적 분석 간의 미세한 균형을 유지해야 할 필요가 있으며, 이는 종종 하이브리드 악성코드 분석이라고 불립니다.
하이브리드 분석
하이브리드 악성코드 분석 은 정적 및 동적 악성코드 분석의 조합입니다.
복잡한 샘플이 있을 경우, 단계별로 악성코드를 분석하는 것이 가장 좋습니다. 예를 들어, 먼저 정적 분석을 통해 탐지를 회피할 수 있는 API 호출을 식별합니다. 그런 다음 에뮬레이션된 환경에서 동적 분석을 수행하여 샘플을 작동시키고 추가 바이너리를 다운로드하는지 확인합니다. 이후에 후자를 얻으면 내부를 다시 정적 분석할 수 있습니다.
악성코드 분석 사용 사례
모든 SOC 팀은 고유하며, 사이버 보안 프로세스는 조직의 규모, 비즈니스 맥락 및 위험 요소에 따라 다르게 조직될 수 있습니다. 아래에서는 악성코드 분석이 적용될 수 있는 몇 가지 사용 사례를 모아보았습니다.
위협 탐지
IOC 및 행동 패턴은 특정 소프트웨어 프로그램(SIEM, SOAR, EDR/XDR)에서 다양한 유형의 위협 탐지 활동을 위한 일반적인 입력입니다. 분석 중에 중요한 악성코드 데이터를 얻으면 최신 위협을 탐지하는 데 도움이 됩니다.
경고 받기
정확한 경고를 받는 것은 어떤 사이버 보안 파이프라인에서도 중요한 부분입니다. 악성코드 분석은 오탐과 누락을 줄이는 데 도움을 주며, 따라서 사이버 보호의 높은 수준을 보장합니다.
위협 추적
새롭고 정교한 유형의 악성코드는 쉽게 잡히지 않습니다. 그럴 때 위협 추적이 중요하게 작용합니다. 악성코드 샘플을 가지고 그것이 어떻게 작동하는지를 이해하는 것은 야생에서 숨어 있는 더 많은 위협을 추적하는 최고의 방법입니다.
사건 대응
물론, 사건 대응 없이는 좋은 사이버 보안 자세가 없습니다. 적절한 대응은 보안 엔지니어가 악성코드의 모습, 어떤 시스템에 영향을 주는지, 어떤 프로세스를 실행하려고 하는지를 상세히 알 때 만들고 실행할 수 있습니다.
악성코드 분석의 단계는 무엇인가요?
분석 작업은 가장 쉬운 것이 아닙니다. 쉬운 것은 데이터 더미에 휩싸이거나 코드를 오해하는 것입니다. 사이버 방어가 성공하기 위해 연구원들은 활동을 몇 가지 악성코드 분석 단계로 나눕니다.
평가 및 분류
악성코드 분석의 초기 단계는 자동화 도구의 도움으로 수행할 수 있습니다. 정적 분석의 경우, 코드 디컴파일과 같은 준비 단계가 필요합니다. 어쨌든 악성코드 분석의 첫 번째 단계에서는 주의가 필요한 코드 부분을 분류하는 것이 필요합니다. 난이도와 우선순위 수준에 따라 나뉘어질 수 있습니다. 검토할 악성 코드의 범위가 정의되고 우선순위가 정해지면 다음 단계로 넘어갈 시간입니다.
데이터 해석
다음으로, 보안 분석가는 특정 악성코드 샘플을 조사하게 됩니다. 앞서 언급했듯, 이는 정적 속성을 분석하여 수행할 수 있거나 안전한 격리된 환경에서 악성코드를 실행하여 수행할 수 있습니다. 악성코드 분석가가 정적 및 동적 분석 중에 노출할 수 있는 모든 데이터를 얻으면, 그들은 그들이 본 것을 해석하려고 시도합니다. 그들은 변수를 이름을 바꾸고, 코드를 실행하며, 실행 패턴에 대한 코멘트를 작성하며 샘플을 추가로 테스트할 수 있습니다.
리버스 엔지니어링
이는 가장 도전적인 부분입니다, 특히 암호화된 샘플이 있으며 무엇을 하는지 그리고 이유가 불분명할 때 더욱 그렇습니다. 게다가, 코드가 다수의 숨겨진 종속성을 가지고 있을 수 있습니다. 악성코드를 리버스 엔지니어링하려는 것은 고급 작업입니다. 그러나 ‘심층 방어’ 접근법의 핵심입니다.
결론 및 추가 조치
분석 결과가 공식화되면, 이를 문서화하고 추가 조치를 취할 차례입니다. 분석가는 악성코드 샘플을 설명하고, 수행한 분석 단계 및 결론을 정리한 악성코드 보고서를 작성합니다. 그들은 또한 수정 권고안을 제공할 수 있습니다.
악성코드 분석을 위한 도구는 무엇인가요?
보안 엔지니어가 매일 사용하는 다양한 악성코드 분석 도구가 있습니다. 정적 분석 도구부터 시작해 보겠습니다:
- PeStudio 는 전 세계 CERT 팀이 악성 파일의 아티팩트를 캡처하는 데 널리 사용됩니다.
- PEiD 는 암호화되거나 패킹된 악성코드를 쉽게 인식하고 구성 요소에 대한 세부 정보를 제공합니다.
- BinText 는 파일에서 Ascii, Unicode 및 자원 문자열을 찾을 수 있는 텍스트 추출기입니다.
- MD5deep 는 악성 해시를 계산합니다. 악성코드 분석기로 사용될 때, 이 소프트웨어 패키지는 다양한 암호화 다이제스트를 통해 많은 파일을 실행합니다.
- Dependency walker 는 32비트 또는 64비트 Windows 모듈을 스캔하고 종속성 트리를 생성합니다.
- IDA Pro 는 바이너리 코드를 소스 코드로 디스어셈블합니다. 또한 원격 애플리케이션을 처리할 수 있는 크로스 플랫폼 디버깅 기능을 제공합니다.
샌드박스에서 악성코드를 분석할 때 Cuckoo를 이미 사용해 보셨겠지만, 체크아웃할 만한 가치가 있습니다. ANY.RUN and Joe Sandbox Cloud. 이들 두 가지는 MITRE ATT&CK® 매핑을 사용하고, 규칙을 사용하며, 행동에 대한 매우 상세한 보기를 제공합니다.
물론, Wireshark 은 여전히 실시간 네트워크 분석을 위한 가장 널리 사용되는 도구 중 하나로 소개할 필요가 없습니다. INetSim 은 실험실 환경에서 인터넷 서비스을 현실감 있게 시뮬레이션합니다 (샘플은 시뮬레이션을 인식할 가능성이 매우 낮습니다). 그런 다음, Microsoft Sysinternals 모음이 있고, 제가 이미 위에서 언급했습니다. 동적 악성코드 분석을 위한 도구가 있습니다. Microsoft Sysinternals suite that I already mentioned above. You’ll find there a whole range of tools for dynamic malware analysis. ScyllaHide 는 실행할 악성코드로부터 디버거를 숨길 수 있는 또 다른 흥미로운 도구입니다. 그리고 실제 리버스 엔지니어링 프로젝트를 수행하고자 할 때에는, NSA의 연구 부문에서 개발한 도구 모음을 살펴보세요 Ghidra 을 사용해 보세요.
악성코드 분석 빌기 시작하는 것은 처음에는 지루할 수 있지만, 참을성을 가지고 더 깊이 들어가면 진정한 보물을 찾을 수 있습니다. 저수준 데이터를 편안하게 다루게 되면, 많은 사람들이 보지 못하는 것을 볼 수 있게 됩니다. 그래서 악성코드 설계자들이 세계에서 가장 똑똑한 사람들이라는 생각 대신, 심지어 가장 진보된 악성코드도 마법을 부리는 것이 아니라 해체하고 중화할 수 있는 또 다른 소프트웨어 조각이라는 것을 입증할 것입니다.
마지막으로, 신속하고 효율적인 위협 탐지 및 위협 사냥을 위해 SOC 프라임의 ‘탐지 코드를 사용한 플랫폼’ 를 구독하세요 – 여기서 최신 사이버 공격을 탐지하기 위한 수천 가지 Sigma 기반 규칙을 찾을 수 있습니다. 그리고 지식을 공유하고 수익화할 준비가 된 경우, 우리의 글로벌 크라우드소싱 이니셔티브에 참여하세요, 위협 현상금 프로그램에 참여하여 사이버 세상을 더 안전한 공간으로 만드는데 도움을 주십시오.