티스토리 뷰
NULL Dereference(CWE-476) : NULL 참조 취약점, NULL Pointer를 기준으로 메모리를 참조하면서 발생
궁금한 내용
- 유저 영역에서의 공격 가능성
- Remote Code Execution 여부
Exploit case
2개의 상황에 맞는 경우는 상황이 조금 특수해야 공격이 가능하다. 예를 들면 addr[offset]과 같은 코드가 있고, offset을 사용자가 제어할 수 있다는 전제 조건이 필요하다. 다음의 코드를 상황에 맞춰 pseudo code로 간략하게 표현하면 다음과 같다.
1 2 3 4 5 6 7 | mov addr, 0x00000000 mov ebx, addr mov eax, <user input> lea ebx, [ebx+eax*4] add ebx, 0x10 mov ecx, [ebx] call ecx | cs |
- addr에 NULL 값 저장
- addr의 값을 레지스터로 불러오는데, 값은 NULL
- 또 다른 레지스터에 사용자 입력 저장
- addr을 기준으로 사용자 입력 * 4한 위치를 가져옴
- 가져온 위치에 0x10을 더함
- 0x10이 더해진 위치의 값을 가져옴
- 호출
이와 같은 경우의 취약점은 유저 영역에서도 충분히 공격할 수 있다. 사용자 입력에 제한이 없다면 (유저 영역 주소 / 4)를 입력했을 때, 4번 과정에서 (NULL + 유저 영역 주소 / 4 * 4)를 하면서 유저 영역 주소가 계산된다. 결과적으로 addr이 NULL을 가리키지만, Exploit 될 수 있는 상황이 만들어 진다.
참고
- 유저 영역 Exploit 실제 케이스 : http://tk-blog.blogspot.com/2009/01/exploitable-userland-null-pointer.html
'Etc' 카테고리의 다른 글
[SQLite] SQLite 바이트코드 엔진 (0) | 2018.11.20 |
---|---|
CWE case별 차이 정리 (0) | 2018.08.21 |
Bindiff 설치 및 약간의 삽질 (0) | 2017.07.23 |
댓글