힙 살포
Heap spraying컴퓨터 보안에서 힙 스프레이는 임의 코드 실행을 용이하게 하기 위해 악용에 사용되는 기술이다.이 기술을 구현하는 공격의 소스 코드 부분을 힙 스프레이라고 한다.[1]일반적으로 힙을 분사하는 코드는 프로세스 힙에 블록을 할당(크게)하고 이러한 블록의 바이트를 올바른 값으로 채우도록 하여 대상 프로세스의 메모리에 미리 정해진 위치에 바이트의 특정 시퀀스를 넣으려고 시도한다.
작전
힙 스프레이는 실제로 보안 문제를 이용하지 않지만 취약성을 이용하기 쉽게 만드는 데 사용될 수 있다.힙 스프레이 자체는 어떤 보안 경계도 뚫는 데 사용될 수 없다. 즉, 별도의 보안 문제가 필요하다.
다양한 요인이 이 과정에 영향을 미칠 수 있기 때문에 보안 문제를 이용하는 것은 종종 어렵다.기억력과 타이밍의 우연한 정렬은 (공격자의 관점에서) 많은 무작위성을 도입한다.힙 스프레이는 이를 보완하기 위해 대량의 주문을 도입하고 성공적인 착취 가능성을 높이기 위해 사용될 수 있다.힙 스프레이는 대부분의 아키텍처와 운영 체제에서 대규모 힙 할당의 시작 위치는 예측 가능하고 연속적인 할당은 대략 순차적이라는 점을 활용한다.즉, 분무된 힙은 힙 스프레이가 실행될 때마다 대략 동일한 위치에 있게 된다.
힙에 저장된 데이터가 여러 역할을 제공하기 때문에 종종 특정 바이트를 사용하여 힙을 분사한다.보안 문제를 이용하는 동안, 애플리케이션 코드는 종종 메모리의 임의 위치에서 주소를 읽도록 만들어질 수 있다.이 주소는 코드에서 실행할 함수의 주소로 사용된다.공격이 응용 프로그램이 분무된 힙에서 이 주소를 읽도록 강제할 수 있는 경우, 코드가 해당 주소를 함수 포인터로 사용할 때 실행 흐름을 제어하고 분무된 힙으로 리디렉션할 수 있다.공격이 성공하면 제어 흐름을 분무된 힙으로 리디렉션하여 공격자가 원하는 작업을 수행할 수 있도록 해당 바이트가 실행된다.따라서 힙의 바이트는 대상 아키텍처에 대한 유효한 지침을 보유하면서 힙 스프레이 자체 내에서 유효한 주소를 나타내도록 제한되므로 애플리케이션이 중단되지 않는다.따라서 타겟 아키텍처에 대한 유효한 주소와 NOP 또는 NOP와 같은 지시사항을 모두 해석하는 단일 바이트로 분사하는 것이 일반적이다.이를 통해 힙 스프레이가 매우 큰 NOP 썰매로 기능할 수 있다(예: 0x0c0c0c0c0c는 종종 비캐논 NOP로[2] 사용됨).
역사
힙 스프레이는 적어도 2001년 이래로 종종 악용에 사용되어 왔지만,[3][4] 이 기술은 Internet Explorer에서 광범위한 버그에 대항하여 이 기술을 사용한 몇몇 그러한 악용들이 발표된 후 2005년 여름부터 웹 브라우저의 악용에 널리 쓰이기 시작했다.[5][6][7][8][9]이러한 모든 공훈에 사용된 힙 스프레이는 매우 유사했는데, 이는 공훈 간 큰 수정 없이 기법의 다용성과 사용 편의성을 보여주었다.초보 해커들이 웹 브라우저와 웹 브라우저 플러그인의 여러 가지 취약성에 대해 신뢰할 수 있는 취약점을 신속하게 작성할 수 있도록 이해 및 사용할 수 있을 만큼 간단하다는 것이 증명되었다.힙 스프레이를 사용하는 많은 웹 브라우저 취약성을 유발하는 작은 스크립트 또는 HTML과 결합된 이전 공격으로부터 복사된 힙 스프레이로만 구성된다.
실행
자바스크립트
웹 브라우저용 힙 스프레이는 자바스크립트에서 일반적으로 구현되며 큰 문자열을 생성하여 힙을 분사한다.가장 일반적인 기법은 한 문자의 줄에서 시작하여 그 자체로 반복해서 연결시키는 것이다.이렇게 하면 문자열의 길이는 스크립팅 엔진에서 허용하는 최대 길이까지 기하급수적으로 증가할 수 있다.브라우저가 문자열을 구현하는 방법에 따라 문자열에 ASCII 또는 유니코드 문자를 사용할 수 있다.힙 살포 코드는 셸코드로 긴 문자열의 복사본을 만들고 이를 충분한 메모리가 살포되어 공격이 제대로 작동하는지 확인할 수 있을 때까지 배열로 저장한다.
VBScript
때때로 VBScript를 사용하여 문자열 함수를 사용하여 문자열을 만드는 경우가 있다.
액션스크립트
2009년 7월, 어도비 플래시에 힙을 분사하기 위해 ActionScript를 사용하고 있는 것으로 밝혀졌다.[10][11]
이미지들
예를 들어 이미지 파일을 프로세스에 로드하는 등 다른 방법을 통해 힙 스프레이를 수행할 수 있다는 것이 입증되었지만,[12] 이는 널리 사용되지 않았다(2008년 8월 기준).[needs update]
HTML5
2012년 9월, EuSecWest 2012에 새로운 기법이 제시되었다.[13]두 명의 코어 연구원인 Federico Muttis와 Anival Sacco는 HTML5와 함께 도입된 기술의 사용을 통해 힙을 매우 높은 할당 세밀도로 분사할 수 있다는 것을 보여주었다. 구체적으로는 캔버스 API가 제공하는 낮은 수준의 비트맵 인터페이스와 웹 작업자들이 그것을 더 빨리 하기 위해 사용하였다.
탐지 및 방지
- 마이크로소프트 리서치의 노즐 프로젝트는 힙 스프레이를 감지하고 방지하는 것을 목표로 한다.[14]
- BuBBle은 힙을[15] 분사한 후 발생한 공격을 감지하고 예방하기 위한 또 다른 대응책이다.
참고 항목
참조
- ^ John Hays, Security Training Engineer (September 2, 2016). "Youtube title: Heap Spray Exploit Technique". Palo Alto Networks Live Community. Retrieved November 14, 2018. 공식적인 "팔로 알토 네트워크 라이브 커뮤니티" 유튜브 채널의 제목은 "Heap 스프레이 이용 기법"이었다.
- ^ corelanc0d3r (December 31, 2011). "Exploit writing tutorial part 11 : Heap Spraying Demystified". Corelan Team. Archived from the original on 25 April 2015. Retrieved 15 January 2014.
- ^ "카메라": 텔넷드 공격 코드
- ^ eEye 디지털 보안 - 연구
- ^ InternetExploiter 1: MSIE IFRAME src&name 매개 변수 BoF 공격
- ^ InternetExploiter 3: MSIE .ANI 파일 "anih" 헤더 BoF 공격
- ^ InternetExploiter 2: MSIE DHTML 객체 처리 레이스 상태 취약성
- ^ "FrSIRT - Microsoft Internet Explorer javaprxy.dll COM Object Vulnerability / Exploit (Security Advisories)". Archived from the original on 2008-03-27. Retrieved 2008-03-25.
- ^ "FrSIRT - Microsoft Internet Explorer "Msdds.dll" Remote Code Execution / Exploit (Security Advisories)". Archived from the original on 2007-12-19. Retrieved 2008-03-25.
- ^ Roee Hay: CVE-2009-1869의 이용
- ^ "FireEye Malware Intelligence Lab: Heap Spraying with Actionscript". Archived from the original on 2014-05-01. Retrieved 2014-04-22.
- ^ Michael Sutton & Greg MacManus, Punk Ode—Black Hat, Flare Sight에서 Shellcode를 사용함
- ^ HTML5 힙 스프레이.EUSecWest 2012
- ^ Microsoft Research의 노즐 프로젝트는 힙 분무 감지 및 방지
- ^ Bubble: 힙-분사 공격에 대한 Javascript 엔진 레벨 대책