Game Dev/Article

메모리 변조를 막는 Coding

AKer 2011. 3. 11. 18:45
반응형
코드 영역을 변조하는 경우는 nProtect나 기타 보안 모듈을 통해서 검출이 가능한데 메모리 변조를 하는 경우는 검출하기가 힘든 것 같다. 따라서 이 포스트에 간단하게 메모리 변조 해키에 대응하는 코드 작성법을 정리해 놓는다.



1. 검증과 방어
간단하다. 예상되는 입력과 출력이 맞는지 코드를 항상 검증한다.

2. 안전한 함수, 안전한 자료형
seed 값이 노출 될 경우 rand 함수의 결과값을 100% 예측할 수 있다. 또 strcpy, strcat 등의 문자열 조작 함수는 버퍼 오버런 공격을 당할 위험이 크다. 따라서 WinCrypt.h에 포함된 CryptGenRandom 함수나 strcpy_s, strcat_s 등의 안전한 함수를 사용하고 기본 자료형을 Wrap한 자료형을 사용하도록 한다.

3. 메모리 주소 랜덤하게 변경하기
항상 같은 순서의 호출이 이루어질 경우 메모리의 주소는 같을 경우가 많다. 따라서 중요한 변수나 자료는 Dummy를 두어서 메모리 주소가 변경되도록 한다. 단 이 방법을 많이 사용할 경우 메모리 단편화의 문제가 생길 수 있다.

4. 문자열을 하드코딩 하지 않기
문자열을 소스 내에 하드코딩 할 경우 코드 영역 바이너리에 해당 문자열이 그대로 기록되고 추적당할 수 있으므로, 문자열만 기록한 리소스나 DLL 등을 통해 관리하도록 한다. 

5. Base+Offset의 체계
패킷이나 메시지 아이디 등을 오랜 기간 추적을 통해 유추할 수 있으므로 해당 ID를 Base + Offset 체계로 변경한다. 이 경우 ID가 유출되어도 Base 값 변경으로 손쉽게 모든 ID 변경이 가능하다.



참고 : 

리버싱
국내도서>컴퓨터/인터넷
저자 : 엘다드 에일람(Eldad Eilam) / 윤근용역
출판 : 에이콘출판사 2009.05.11
상세보기
Writing Secure Code 2nd Edition
국내도서>컴퓨터/인터넷
저자 : Michael Howard,David LeBlanc / 지정기역
출판 : 정보문화사 2003.09.09
상세보기





반응형