2016년 8월 6일 토요일

정보보안기사 정리 12 - 2013 OWASP TOP 10: DLL, XPATH, LDAP Injection 개념

A1. Injection - DLL, Code(Thread), LDAP, XPATH Injection 개념

* Injection은 SQL injection 하나만 있는지 알았는데 종류가 다양함.

1. DLL Injection
- 다른 프로세스에게 LoadLibrary() API를 호출하게 하여 특정 DLL파일을 강제로 로드 시키는 것.
- 각각의 프로세스들은 독립적인 주소공간을 가지면서 자신이 수행되는데 필요한 DLL들을 자신의 프로세스 메모리 영역에 로드함.
- 프로세스의 메모리 영역에 로드된 DLL들은 해당 프로세스의 메모리 영역에 대해 정당한 접근권한을 가지므로,
  만약 DLL Injection으로 공격자가 원하는 DLL을 특정 프로세스의 메모리 영역에 삽입한다면 해당 프로세스의 메모리에 대해 정당한 접근을 할 수 있게 됨.
  단순 노트패드 프로그램이 통신 DLL을 삽입하면 외부와 통신 가능.
  즉, DLL을 삽입하면 DLLMAIN이 수행되면서 버그패치, 기능 추가 등의 일을 할 수 있음.
- 문제는 악의적인 의도로 삽입한 DLL.
  악성코드를 다운 받게하거나, 키로거를 실행시키고, 백도어를 열수도 있음.
  API 후킹에 사용되기도 함(정상적 API 호출에서 공격자가 원하는 기능을 추가하거나 기존 기능을 삭제할 수 있음).

* DLL 이란
윈도우에서 사용되는 동적 연결 라이브러리 파일을 의미. 프로그래밍할 때 <stdio.h>, <string.h> 같은 것은 정적 라이브러리이며,
동적 라이브러리는 kernel32.dll 같은 것으로 필요시 프로그램 내부에서 DLL파일을 호출해서 사용함.
동적라이브러리의 장점: DLL은 필요할 때 호출해서 사용하는 방식이므로 프로그램이 메모리에 적재되는 용량을 줄일 수 있음. 또한 DLL 코드가 변경되어도 함수 이름, 인자가 동일하다면 프로그램자체를 다시 컴파일하고 링킹할 필요가 없음. (정적 라이브러리는 매번 컴파일을 다시 해야 함.)

* DLL Injection & API Hooking 참고
- http://www.reversecore.com/38

* LoadLibrary 함수 설명 참고
- http://sweeper.egloos.com/2991664


2. Code Injection (Thread Injection, Memory Injection 이라고도 함)
- 타켓 프로세스의 메모리에 공간을 할당하고 실행 시킬 Thread를 삽입한 후, 실행시키는 공격.
- 타켓 프로세스에서 쓰레드가 실행 되면서 악의적인 기능을 수행하게 할 수 있음

* 참고
http://ezbeat.tistory.com/253


3. LDAP Injection
- LDAP(Lightweight Directory Access Protocol)는 조직이나 기업에서 내부 자원(파일, 장치 등) 등의 위치를 찾고, 조작할 수 있게 하는
  X.500 디렉터리 서비스를 위한 소프트웨어 프로토콜 임.
- 웹 어플리케이션에서 사용자가 입력한 LDAP 쿼리를 수행하는데, 입력값을 적절히 제한하거나 필터링 하지 않는다면
  LDAP 구문을 변경하여 개인정보 획득, LDAP 트리의 수정, 삭제등을 할수 있음.
- 취약점 점검 방법
  ① LDAP에서 와일드 문자로 사용되는 * 기호를 입력하여 반환되는 데이터 량의 변화를 확인.
  ② 특수 문자 필터링 확인
- 취약점 조치 방안
  LDAP 쿼리로 입력한 값은 허용된 문자로만 검증이 되어야 하고, ( ) ; , * | & =와 같은 LDAP 쿼리에 영향을 주는 특수문자는 입력되지 못하게 해야 함.


4. XPATH Injection
- XPATH(XML Path Language) 는 XML 문서의 일부분을 참조하는데 사용되는 언어. SQL과 비슷하게 어떤 규칙 또는 태그 조건 등을 나열하면
  XML 문서에서 해당 규칙과 태그 조건을 만족하는 속성과 값이 결과로 나타남.
- 예를 들어 사용자 정보를 포함하는 XML 문서가 있을 때,
  사용자 이름(name)이 상위 요소이고, 하위 요소로 계정(account), 비밀번호(password) 등이 있다면, XPATH 쿼리를 이용하여 값을 알아내거나 조작할 수 있음.
- 대응
  XPATH 쿼리는 입력 값 검증을 통해 필요한 문자만을 받아들이게 해야 함.
  ( ) = ‘ [ ] : , * / 등 XPath 쿼리에 문제를 야기할 수 있는 특수문자는 입력하지 못하게 해야 하며, 
  특정 특수문자만을 필터링하는 것이 아닌 허용된 문자 이외의 모든 입력을 허용하지 않아야 함.

댓글 없음:

댓글 쓰기