Reverse Engineering++ For Exploit Analysis 트레이닝 설명

리버스 엔지니어링은 엔지니어링 과정을 거꾸로 되짚어 어떠한 메커니즘이 작동하는 원리를 연구하는 엔지니어링의 한 분야라고 볼 수 있습니다. 언제 리버스 엔지니어링이 필요할까요? 리버스 엔지니어링은 주로 설계도가 없는 상태에서 하드웨어 메커니즘을 연구하여 비슷한 물건을 만들어 내기위해서 사용되어 왔습니다. 전통적으로 소프트웨어 세계에서의 리버스 엔지니어링은 상용 어플리케이션의 라이센스 메커니즘이나 보호 메커니즘을 깨기 위해서 많이 연구 되어 왔습니다.

익스플로잇 개발을 위한 리버스 엔지니어링

하지만 최근 소프트웨어의 취약점을 이용한 다양한 공격 기법들이 개발되면서 리버스 엔지니어링은 익스플로잇(exploit)을 작성하는데에 있어서 빼 놓을 수 없는 기술로 자리잡게 되었습니다. 문서화 되지 않은 여러 소프트웨어의 작동 방식을 연구하기 위해서는 리버스 엔지니어링이 필요합니다. 또한 익스플로잇의 작동을 방해하기 위한 여러 미티게이션(mitigation)을 우회하기 위해서, 그러한 보호 메커니즘의 작동 방식을 이해하기 위해서는 결국 리버스 엔지니어링 스킬을 사용할 수 밖에 없습니다.

익스플로잇 개발에 있어서 RCA와 보안 메커니즘에 대한 분석은 필수이다

퍼징 등의 방법론을 통해서 얻어진 수많은 크래쉬들을 분석하기 위해서도 고난이도의 리버스 엔지니어링 스킬이 필요합니다. 본질적으로 퍼징은 브루트 포싱의 성격이 강하기 때문에 크래쉬 덤프를 얻어 내었다고 해서 리서처가 그 버그의 의미와 루트 코즈(Root Cause)를 알고 있다라는 의미가 아닙니다. 기본적인 트리아징(triaging)을 통해서 익스플로잇 가능성이 희박한 단순 크래쉬들을 모두 배제한 이후 남는 과제는 많은 시간을 실제 익스플로잇 개발에 투자하기 이전에 해당 크래쉬가 발생한 원인을 이해하고 익스플로잇 작성을 위한 전략을 수립하는 것입니다. 거기에 리버스 엔지니어링 스킬은 굉장히 중요하게 작용합니다.

디펜더를 위한 리버스 엔지니어링

리버스 엔지니어링은 공격을 위해서만 필요한 것이 아닙니다. 리버스 엔지니어링은 역설적이게도 공격자들의 공격 도구와 익스플로잇의 얼개와 작동 방식을 이해하기 위해서도 필요합니다. 많은 경우 공격자의 도구들과 익스플로잇들은 소스 코드가 없는 형태로 사용되거나 소스 코드가 있더라도 여러 레벨의 난독화를 적용하는 경우가 많습니다. 또한 알려지지 않은 제로 데이 취약점을 사용하는 익스플로잇의 경우에는 근본적으로 어떠한 이유로 인해서 해당 취약점이 발생했는 지를 알아 내기 위해서는 결국 리버스 엔지니어링 기술들을 사용할 수 밖에 없습니다. 프로덕트 시큐리티를 책임지는 방어자의 입장에서는 리버스 엔지니어링은 필수 기술이 될수 밖에 없습니다.

취약점으로 부터 쉘코드, 그리고 페이로드
실행까지 추적하는 작업은
익스플로잇에 대한 이해를 위한 필수적인 과정이다.

또 다른 측면에서 리버스 엔지니어링은 자신이 보호하고 있는 네트워크와 시스템으로 유입되는 말웨어들과 익스플로잇들의 행동 방식을 이해하고 그 파급 효과를 알아 내기 위해서도 필요합니다. 최근의 많은 익스플로잇과 쉘코드들은 그 의도를 최대한 숨기기 위해서 여러 스테이지로 공격을 나누고 조심스러운 공격을 실행하는 경우가 흔합니다. 많은 경우 특정 조건에서만 트리거 되는 액션들이 있거나 아주 긴 시간을 잠복하기도 합니다. 단순한 프로그램 행동 모니터링만으로는 특정 익스플로잇, 쉘코드 그리고 말웨어의 의도를 파악하기가 싶지 않은 상황이 되었습니다. 수준 높은 리버스 엔지니어링 스킬은 이러한 경우에 공격자에 대해서 더 많은 정보와 의도를 파악할 수 있게 하는 중요한 원천이 됩니다.

보안 산업과 기업 보안

보안 산업은 일반적인 말웨어와 위협에 대한 대증 요법에 집중하면서 발전되어 왔습니다. 하지만, 특정 산업 섹터나 특정 기업, 국가 기관에 집중하는 공격에 대해서는 일반 보안 기업의 역할은 제한 될 수 밖에 없습니다. 결국 많은 기업들과 기관들은 자체적인 분석 인력과 인프라 스트럭쳐를 구축하는 방향으로 진행하는 것만이 진정한 프로액티브한 방어 체계를 구축하는 첫걸음이 될것입니다.

하지만, 많은 경우 퀄리티 있는 리버스 엔지니어와 시큐리티 엔지니어를 구하는 것은 점점 어려워지고 있습니다. 그래서, 많은 보안 벤더들이 매니지드 위협 헌팅/분석 서비스를 제공하는 경우가 많습니다. 예를 들어 마이크로소프트의 Microsoft Threat Experts는 좋은 예입니다. 하지만, 그러한 서비스 조차도 결국 현재의 급변하는 위협적인 인터넷 환경의 모든 위협들, 특히 특정 기업과 기관들을 타겟으로 하는 특정적인 공격들, 이른바 APT (Advanced Persistent Threat)에 대해서는 적절한 시간에 완벽한 도움을 주기에는 힘이 듭니다. 특히, 보안 위협에 대한 진단과 분석이 곧 해당 기관과 기업의 내부 비밀의 누출과 연결될 가능성이 있는 경우 이렇게 외부 서비스를 사용하는 것에 더더욱 망설여 지는 이유가 되고 있습니다. 이러한 측면에서 결국 어느 정도의 규모 있는 조직들은 내부 분석 인프라 스트럭쳐와 분석 인력을 고용하고 능력을 키워 나가는 것은 당연한 귀결입니다.

윈도우즈 리버스 엔지니어링

이 트레이닝은 리버스 엔지니어링 고급 과정에 해당하는 내용으로서 특히 APT 등에서 사용되는 여러 공격 기법들을 분석하고, 익스플로잇 개발 과정에서 직면하는 여러 리버스 엔지니어링 챌린지들을 해결할 수 있는 방법들을 제시합니다.

먼저 리버스 엔지니어링의 대상 플랫폼인 윈도우즈로에서 사용할 수 있는 기본적인 툴셋들, 예를 들어 WinDbg, IDA 그리고 Ghidra 등에 대한 기본 내용을 학습하는 것으로 과정을 시작합니다. 그리고, Unicorn, Capstone 등의 에뮬레이션, 디스어셈블리 기술들을 사용한 분석 자동화 기법에 대해서 알아 보고, Pin, DynamoRIO, TTD (Time Travel Debugging) 등의 바이너리 인스트루멘테이션 기술에 대한 기본과 사용법에 대해서 학습합니다.

이후 과거에 실제로 사용된 중요한 APT 공격 사례와 샘플 셋을 통해서 어떠한 분석과 익스플로잇 제작에 챌린지가 있는지 단계적으로 분석할 수 있는 기회를 가질 예정입니다. 윈도우즈 플랫폼에서는 브라우저, 플래쉬 , 오피스, win32k 등의 컴퍼넌트들이 주로 공격을 당하고 있습니다. 이러한 타겟들에 대해서 RCA (Root Cause Analysis)에 포커스해서 분석할 예정입니다.

Root Cause Analysis는 프러덕트 시큐리티의 필수 과정이다

이러한 심화된 익스플로잇 분석과 트리아징(triaging)의 비용은 상당히 높습니다. 결과적으로 인스트루멘테이션 등의 기술을 사용한 자동화 방법을 찾는 것이 보안 커뮤니티의 주요 과제 중의 하나로 인식 되고 있습니다. 여러 인스트루멘테이션 기술 중에서 특히 가장 성숙한 기술 중의 하나인 TTD의 실제 익스플로잇 케이스에 대한 적용에 대한 실습에 포커스할 예정입니다. TTD는 프로그램의 실행 과정을 레코딩하여 파일로 저장하고, 이후에 WinDbg를 사용하여 다시 전체 실행 과정을 인스트럭션 레벨에서 재현할 수 있는 기술입니다.

결론

방어자들은 익스플로잇에 포커스된 고급 리버스 엔지니어링 학습을 통해서 윈도우즈 플랫폼에서의 버그 트리아징 프로세스와 익스플로잇 분석 방법론, 그리고 크래쉬에 대한 RCA 기법 등에 대해서 심화된 이해를 얻을 수 있을 것입니다. 이러한 방법론과 기법은 다른 플랫폼에 대해서도 동일한 방식으로 적용될 수 있고, 업무 자동화를 이룰 수 있는 기반이 될것입니다.

공격자의 입장에서는 더 효율적으로 크래쉬를 분류, 분석할 수 있는 기술을 습득할 수 있습니다. 익스플로잇 가능한 버그와 가능하지 않은 버그에 대해서 빠른 속도로 분류하고 취약점에 대한 익스플로잇을 작성하는 과정을 더 정교화할 수 있는 기반이 될것입니다.

이 트레이닝 과정에 대해서 더 자세히 알고 싶다면 Reverse Engineering++ For Exploit Analysis 페이지를 참조하시기 바랍니다. 11월 18일 한국에서 열릴 트레이닝에 참여하시고 싶으신 분은 다음 등록 페이지를 이용하시기 바랍니다.

Leave a Reply