반응형
코드 영역을 변조하는 경우는 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 변경이 가능하다.
참고 :
|
|
반응형
'Game Dev > Article' 카테고리의 다른 글
내가 만들고 싶은 회사 (작성 중) (0) | 2011.05.24 |
---|---|
Float 상수의 컴파일-타임 최적화 (0) | 2011.03.31 |
최근 일하면서 느낀 점들 (0) | 2011.03.04 |
우리나라는 왜 닌텐도DS 같은 게임기 못 만드는가 (0) | 2010.09.07 |