ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ROP] Chapter 1 - Introduction (KOR)
    Paper/KOR 2018. 7. 2. 05:42

    Andreas Follner - Dissertation - Final

    ON GENERATING GADGET CHAINS FOR RETURN-ORIENTED PROGRAMMING

    Chapter 1
    소개

    모리스 웜(Morris worm)이 인터넷을 통해 퍼져 나갔을 때 Low-level 메모리 오염(corruption) 취약점이 발견되었다. 정확히 알 수 없지만 인터넷에 연결된 컴퓨터의 약 10%가 감염된 것으로 추정되며 그 당시에는 약 6,000대의 컴퓨터가 감염된 것으로 추정됩니다. 그밖에도 유사한 취약점을 이용한 CodeRed(2001), Slammer(2003), 혹은 Blaster(2003)등이 있다. 이로 인해 그러한 버그에 대한 인식이 높아졌지만, 오늘날의 소프트웨어에서는 여전히 흔하며, 현대적인 공격은 거의 30년 전에 존재했던 동일한 유형의 취약점을 악용합니다.

     근본적인 문제는 두 가지로 나눌 수 있습니다 : Von-Neumann 아키텍처로 인해 코드와 데이터는 메모리에서 분리되지 않습니다. 이는 프로그램이 데이터 실행을 속일 수 있음을 의미합니다. 두 번째 문제는 프로그래밍 언어와 관련이 있습니다. C 와 C++ 과 같은 안전하지 않은 언어는 성능이 뛰어나고 많은 양의 레거시 코드(legacy code)가 있기 때문에 널리 사용되고 있습니다. 이러한 언어의 문제점은 프로그래밍 방식으로 직접 액세스와 메모리 조작을 허용하고 프로그래머가 직접 사용자의 입력을 sanitize하게 처리 할 수 있도록 하는 것입니다. 예를 들어, 프로그래머가 20 characters 만큼의 버퍼를 선언하면 프로그래머는 사용자의 입력이 20자를 넘지 않는지 확힌해야합니다. 프로그래머가 만약 이를 무시한다면 긴 입력은 메모리의 다른 데이터를 덮어씁니다. 잘못된 프로그램 출력, 충돌 또는 최악의 경우 공격자가 임의 코드를 실행할 수 있습니다.

     완화 기술이 널리 배포되지 않은 2000년대 초반까지 exploitation은 간단했고 다음 단계로 구성되었습니다 : (i) 쉘코드를 1대상 프로그램에 삽입합니다. (ii) 리턴 어드레스와 같은 포인터를 인터럽트 쓰기에 오버플로우 할 수 있다. 스택 스매싱(stack smashing)으로 널리 알려져 있는 이 공격은 프로그램의 의도 된 제어 흐름을 하이재킹 할 수 있습니다. 공격자가 프로그램을 강제 실행하여 임의의 위치에서 실행을 계속 할 수 있기 때문입니다. 일반적으로 공격자는 코드 포인터를 이전 단계에서 주입 한 코드의 메모리 주소로 덮어 쓰며 실행됩니다. 

     이러한 공격에 맞서기 위해 이러한 취약점의 악용을 방지하기 위해 설계된 많은 수의 완화 기술이 학계와 산업계 모두에서 제안되었습니다. 그 중 일부는 주입된 코드의 실행을 막는 DEP(Data Execution Prevention)와 ASLR(Address-Space-Layoutrandomization)과 같은 최신 아키텍처의 표준으로 자리 잡고 있습니다. 이러한 것들은 공격자들이 메모리의 어느 위치에 그들의 쉘코드가 있는지 알기 어렵게 합니다. 그것들은 종종 효과적이지만 공격자들은 공격을 피하면서 점점 더 정교한 공격 기술을 개발합니다. 실제로, 새로 패치가 되었지만 불과 몇 주 후에 우회가 되는 경우가 종종 있습니다.

     반환 지향 프로그래밍(ROP)라 불리는 공격 기법은 코드 악용의 초석이 되어 코드 재사용 원칙을 기반으로 합니다. DEP는 데이터 실행을 막아 주어 공격자가 임의 코드를 주입하고 실행 할 수 없도록 합니다. 그러나 기본 취약점의 악용, 즉 제어 하이재킹(control-flow hijacking)도 방지되지 않으므로 공격자는 이미 메모리에 있는 코드로 이동할 수 있습니다. 우리가 이 논문에서 집중적으로 다루는 널리 사용되는 x86-64 아키텍처를 비롯한 특정 아키텍처의 특성 때문에 신중하게 선택한 코드 조각 또는 장치를 함께 연결 한 다음 연속적으로 실행할 수 있습니다. ROP 가젯의 이러한 조합을 ROP Chain 이라고 합니다.

     ROP는 Turing complete이므로 ROP를 사용하여 임의의 프로그램을 구성하는 것이 이론상으로는 가능합니다. 그러나 이것은 복잡하고 번거롭기 때문에 많은 수작업과 세심한 주의가 필요합니다. 따라서 exploit 개발자는 일반적으로 이 경로를 피합니다. 대신 ROP를 이용하여 API를 호출하여 주입된 쉘 코드를 실행하여 DEP를 효과적으로 우회합니다. 이러한 exploit 들은 종종 2단계로 불립니다. 첫 번째 단계에서는VirtualProject (windows) 또는 mprotect(Linux)와 같은 운영체제 API를 사용하여 ROP로 DEP를 우회합니다. 이러한 API는 런타임에 프로그램이 동적으로 코드를 생성할 때 메모리 보호 수준을 변경하는 방법이 필요하기 때문에 존재합니다. 첫 번째 단계가 끝나면 두 번째 단계인 쉘 코드가 실행됩니다. 실제적으로, 우리는 하나의 순수한 ROP공격만을 인식하고 있으며, 이러한 공격은 2단계 공격에 대한 이익을 창출하고 제공하기가 훨씬 어렵습니다.

     이러한 두 단계 공격은 순수한 ROP 공격보다 구성하는 것이 더 간단합니다. 왜냐하면 한 가지 함수를 호출하기 위해서만 ROP가 필요하기 때문입니다. 그럼에도 불구하고, 많은 양의 수작업을 필요로 합니다. ROP 개발을 지원하도록 설계된 현재 사용 가능한 도구는 개념, 기능, 기능성 등을 포함하여 최신 아키텍처를 지원합니다. 이것은 실제로 유용성을 제한하며, 도구가 가젯 검색의 간단한 작업에만 사용된다는 사실은 그 사실을 입증합니다.

     다른 한편으로 학계에서 제안한 많은 완화 방법은 바이너리에서 사용 가능한 가젯의 수를 대폭 줄여 exploit 개발자가 더 복잡한 가젯을 사용하도록 강요합니다. 복잡한 가젯은 종종 길고 일반적으로 부작용을 포함하며, 즉 exploit 개발자가 원래 원하는 작업을 달성할 뿐만 아니라 원하지 않는 방식으로 메모리 또는 레지스터에 영향을 미친다. 또한 복잡한 가젯에는 사전 조건이 있는 경우가 종종 있습니다. 가젯이 올바르게 작동하려면 읽기 가능한 메모리를 가리키도록 특정 레지스터가 필요합니다. 현재 사용 가능한 도구는 현재 시나리오에서 성능이 좋지 않으며 그러한 완화가 사용될 때 전혀 작동하지 않아 매우 기본적인 도구 지원으로 ROP exploit 개발을 주로 수동 작업으로 만듭니다. 이 논문에서 우리는 ROP 익스플로잇의 완화와 구성을 살펴본다. 먼저, ROPocop이라고 불리는 ROP exploits 를 탐색합니다. 다음으로 PSHAPE라고 불리는 첨단 기법의 경우에도 개발 계획을 수립하여 기술 개발을 시도하십시오.

    반응형

    'Paper > KOR' 카테고리의 다른 글

    [정보보호학회논문지] 스마트워치 데이터 분석 및 위험도 평가*  (0) 2019.09.05
    논문 읽는 방법  (2) 2018.08.01
    [ROP] Abstract (KOR)  (0) 2018.07.01
Designed by Tistory.