티스토리 뷰

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
  1. addr에 NULL 값 저장
  2. addr의 값을 레지스터로 불러오는데, 값은 NULL
  3. 또 다른 레지스터에 사용자 입력 저장
  4. addr을 기준으로 사용자 입력 * 4한 위치를 가져옴
  5. 가져온 위치에 0x10을 더함
  6. 0x10이 더해진 위치의 값을 가져옴
  7. 호출

  이와 같은 경우의 취약점은 유저 영역에서도 충분히 공격할 수 있다. 사용자 입력에 제한이 없다면 (유저 영역 주소 / 4)를 입력했을 때, 4번 과정에서 (NULL + 유저 영역 주소 / 4 * 4)를 하면서 유저 영역 주소가 계산된다. 결과적으로 addr이 NULL을 가리키지만, Exploit 될 수 있는 상황이 만들어 진다.



참고


'Etc' 카테고리의 다른 글

[SQLite] SQLite 바이트코드 엔진  (0) 2018.11.20
CWE case별 차이 정리  (0) 2018.08.21
Bindiff 설치 및 약간의 삽질  (0) 2017.07.23
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31