메모리 취약점
- 애플리케이션의 메모리 관리 버그를 공격해 의도치 않은 동작을 발생시켜 자신의 명령을 주입하고 실행할 수 있다.
- 주로 개발자가 직접 애플리케이션의 메모를 관리하는 프로그래밍 언어에서 주로 발생한다.(C, C++)
- 개발자는 동적으로 동작을 수행하기 전 적합한 양의 메모리가 할당되었는지 확인해야 한다.
- Ruby, Python, PHP, Java 등의 언어는 상대적으로 메모리 버그에 덜 취약하다.
버퍼 오버플로
- 애플리케이션이 할당된 메모리(버퍼)에 비해 지나치게 큰 데이터를 쓰는 버그
- 개발자가 변수에 저장할 데이터의 크기를 확인하지 않았거나, 필요한 데이터 크기를 잘못 계산했을 때 발생한다.
- 일반적으로 strcpy(), memcpy()와 같이 메모리를 변경하는 함수에서 발생하나, malloc(), calloc()같은 메모리 할당 함수에서도 길이 검사 누락으로 인한 버퍼 오버플로가 발생할 수 있다.
- 임의 코드 실행(RCE) 및 권한에 따라 서버 장악까지 가능
경계를 벗어난 읽기
- 애플리케이션이 지정된 변수나 작업에 대해 너무 많은 메모리를 읽을 때 발생한다.
- 예시) OpenSSL Heartbleed 버그
-> OpenSSL란? 감청에 대한 걱정 없이 네트워크로 안전한 통신을 가능하게 하는 라이브러리
->OpenSSL의 하트 비트 요청 기능: 서버에 특정 메시지를 보내면 서버가 동일한 메시지를 반환하며 서로가 통신하고 있는 것을 확인해 주는 기능.
-> 취약한 버전의 OpenSSL은 실제 반환되는 메시지 크기가 아니라 길이 파라미터를 기반으로 메시지 길이를 계산한다.
->공격자는 큰 길이 파라미터를 설정한 하트 비트 요청을 보내 Heartbleed를 익스플로잇 할 수 있다.
메모리 취약점 사례 - 파이썬 Hotshot 모듈
URL: N/A
출처: http://bugs.python.org/issue24481
보고 날짜: 2015년 6월 20일
공격 대상: Hotshot 모듈의 문자열 복사 코드
- 파이썬 프로그래밍 언어는 전통적으로 C로 작성된다. 실제로 CPython이라 불리기도 한다.
- 파이썬 hotshot 모듈은 프로그램의 다양한 코드가 얼마나 자주, 그리고 얼마나 오랫동안 실행되는지를 알려주는 모듈이며 C언어로 작성되었다.
취약점 발생 포인트: memcpy()
- 한 위치에서 다른 위치로 지정된 수의 메모리를 복사하는 memcpy()에서 취약점 발생
memcpy(self -> buffer + self-> index, s, len);
- self -> buffer 인 목적지 변수는 항상 고정 길이를 갖지만 소스 변수인 s는 어떤 길이든 될 수 있다.
- 따라서 공격자는 할당된 바이트 수보다 긴 문자열을 함수에 전달할 수 있고, 문자열은 목적지에 쓰이고 오버플로돼 다른 메모리까지 덮어쓰게 된다.
'4-5. 2022-2 심화 스터디 > 버그 헌팅과 모의 해킹' 카테고리의 다른 글
[2022.11.26] SSRF (0) | 2022.12.02 |
---|---|
[2022.11.19] 원격코드실행(RCE) (0) | 2022.11.25 |
[2022.11.12] sql injection + Oauth 취약점 (1) | 2022.11.18 |
[2022.10.08] 메모리 취약점 문제 풀이 - LOB (1) | 2022.10.14 |
[2022.09.17] 크로스 사이트 스크립팅(xss) (0) | 2022.09.23 |