본문 바로가기

Server/Security

ETRI 보안 세미나

일   시 : 2006년 11월 28일 (화) 15:00~18:00
주   제 : 온라인게임 해킹 동향 및 기술 분석
교육장소: 분당 KTIDC 1층 교육장
 

ETRI에서 주최하고 안철수 연구소에서 세미나를 열었습니다.
최신 온라인 게임의 해킹 유형과 대응 방법등을 주제로 한 보안 세미나 였습니다.
 
PT자료와 기타 세미나 자료등은 안철수 연구소측의 사내 규정으로 인하여 받지는 못하였습니다. ^^; (치사하게 그게 뭐 라구 ㅎㅎ)
 
여하튼, 자료를 주지 않아서 정리하고 자료 분석하며 필기 하는데 정신없이 보낸것 같습니다.
 
[목차]
1. 온라인 게임 해킹의 최신 동향
2. 온라인 게임 해킹의 종류
3. 게임 해킹의 분석 예제
4. 게임 개발 시 고려 사항
5. 해킹 제작 과정 및 시연
 
1. 온라인 게임 해킹의 최신 동향
   게임 성장 -> 게임 발전 -> 글로벌화
   개인 해킹 -> 집단 해킹 -> 그룹 해킹 -> 기업적 해킹 -> 유지 보수
 
   각 나라별 유형
      1) 한국 & 일본 : 개인 위주로 자신의 실력을 상징하기 위해 소수 집단
      2) 유럽 : 그룹화가 잘 되어 있으며, 활발한 정보 공유를 통한 최신 기술 사용 (단, 온라인 게임 보단 패키지 게임 위주)
      3) 미국 : 시스템 해킹에 더 주류 (윈도우, 리눅수, 유닉스등), DOS
     4) 중국 : 기업화된 해킹 기업 -> 온라인 게임 해킹 툴의 90% 이상 제작!!! -> 상용화 -> 유지 보수
 
  해킹 툴의 종류 : 범용 / 전용
      범용 : 다양한 게임 및 APP에 적용
      전용 : 특정 게임에 적용.
 
 
2. 온라인 게임 해킹의 종류
 
 해킹 툴 제작 과정
    타겟 설정 -> 분석 -> Disassemble -> Pseudo Code 작성 -> 배포 -> 문서
      ※ "분석->실행->동작"이 되어야 해킹 되었다
 
  1) Auto Mouse / AI
       클라이언트 행동약식을 저장하여 반복
       오토마우스의 종류
          a) 소프트웨어 - 프로그램 설치로 마우스와 키보트 이벤트를 오픈
          b) 드라이버 - mouse.sys, keyboard.sys등을 변조하여 입력 (커널 조작)
          c) 하드웨어 - 외부입력 자체를 자동화.
 
  2) Keylogger
       사용자가 입력하는 모든 키보드 문자열을 필터링하여 저장(ID/PW등 모두)
 
 3) Reversing
       클라이언트 자체 파일을 분석하여 안의 수치를 바꿈 (인증무시, 게임 밸런스 파괴, ex)프리스타일 3점 핵 ))
 
       언패킹 -> 디스어셈블 -> 스택 백 트레이싱 -> 스트링 분석, 사용자 함수 목록 파악 -> 특정 call함수 무력화
 
  4) File Modification
       온라인 보다는 패키징 게임에서 주로 사용, 클라 자체 파일을 HEX코드 값 수정(세이브 값 수치 변경)
 
  5) Memory Hack
       프로세스 오픈 -> 번지 수 찾기 -> 수치 변경 -> 메모리 쓰기 (돈 늘리기, 아이템 수량 변경등)
       주로 Replay-Attack기법을 사용.
 
      ex) 인트라넷 -> 트래킹 -> 이슈번호 0000161: Replay-Attack를 이용한 해킹 참조.
 
  6) Packet Modificatoin
       서버와 클라간의 통신에 사용되는 패킷을 캡쳐 후 변경된 패킹 전송
 
          a) 클라 조작 : Soket API 후킹
          b) O/S 조작 : LSP 변조(TCP/IP)
          c) 드라이버 : NDIS(랜카드) - 필터링을 통한 변조
          d) 외부 : Proxy를 이용한 우회
 
  7) Speed Hack
       시스템 타이머 조작으로 겜상의 스피드를 올림
 
          a) 클라 조작 : API 후킹으로 시간 변조
          b) O/S 조작 : Windows Timer 변조
          c) 하드웨어 : 하드웨어 타이머 변조(PIT)
 
       역시 강력한 것은 b), c)가 아닌까 생각됩니다.
 
   8) Auto Bot
       일명 자동 사냥 (Advanced Auto Mouse) : 겜상에서 자동으로 사냥하며, 아이템을 먹으며 로봇이 인공지능적으로 사용됨.
       이를 막기 위해 겜 중간 중간 질문을 던지어 답을 얻기도 하는데, 퀘스트 봇은 이 질문에 자동 응대함.
 
      ex1) 한 때 디아블로에서 메피를 잡으면 아템이 좋다고 해서 자동봇을 이용하여
        "방만들기 -> 액트3 (마지막 지점으로 이동) -> 텔테포트를 이용하여 지하 3층까지 감 -> 메피로 돌진 -> 자동 공격 -> 떨어진 아템중 중요한것만 취득 -> 방깨기 -> 방만들기"
        위 방법으로 서브 컴을 3일인가 돌렸더니만 할배검을 먹음 ㅡ.ㅡ;
 
      ex2) WoW의 봇의 경우 : 특정 지역에서 마우스가 이리 저리 돌면서 사냥을 하고 떨어진 아템 중 중요한 것만 취득.
         -> 해당 지역의 몹 부족 -> 트래픽 증가 -> 밸런스 파괴.
 
 
3. 게임 해킹의 분석 예제
     Black Box Analysis -> Gray Box Analysis -> White Box Analysis
     활동 분석 -> 코드 분석 -> 세부 코드 분석
 
    ex) d3d8.dll ,d3d9.dll 이용한 해킹 (Reversing)
 
         다이렉트에서 사용되는 DLL을 후킹 후 변조된 DLL로 교체
        -> 일반적인 함수 콜이 오면 원래 DLL로 토스
        -> 특정 함수 콜이 오면 후킹된 DLL 사용
 
         !) 내 캐릭틍 투명인간이 된다. -> 전 게임에 적용 가능
         a) FPS의 경우 일명 wall-hack 이라 불리며, 상대 캐릭터 오브젝트를 벽 앞으로 재배치 -> 상대 위치 파악
         b) MMOPRG의 경우 상대가 어디 숨어 있는지 알수 있음
         c) 액션 게임의 경우 상대를 때린 뒤 벽 뒤로 숨어 버림.
 
 ※ 해킹 대응 검사 방식
      1) 해킹 파일 실행
      2) 게임 실행 파일을 디버그 파일로 실행
      3) 꼭 필요한 함수 뒤에 break를 걸구 징후 파악
          Break가 걸리는가? -> 클라 파일 사용
          Break가 안 걸리는가> -> 클라 파일 사용 안함 -> DLL injecton 가능성 큼
      4) 해킹 파일 단독 실행 -> 알고르즘 분석 -> 파일 분석
           § 요새 해킹 파일은 독자적인 패킹과 암호와 역어셈등방지 기능 까지도 사용함.
      5) 시작 지점에 BP걸고 스택 백 트레이싱을 통한 역방향 탐색
      6) 해당 알고리즘 패턴 분석 후 대처
 
 
4. 게임 개발 시 고려 사항
 
  1) 클라이언트 전송 DATA 유효성 검사
      : 변수 형식의 최대 값이 아닌, 운영에 필요한 값의 최소/최대 검사. (레벨2는 10만점 경험치가 있어야 된다.)
         변수 형식 -> 레벨 2, 100만 경치 -> 통과 -> 재 로그인 -> 레벨 3로 변경됨.
         운영 변수 검사 -> 레벨2는 10만이어야 된다. -> 통과 -> 재 로그인 -> 레벨 2
 
  2) 중요한 데이터는 서버에 둔다.
      : 중용한 데이터는 전부 서버에 두어 서버와 통신하여 인증하는 방식으로 한다.
        클라안에 중요 데이터가 일부라도 들어 있으면 100% 해킹 됨.
 
  3) 서버를 통한 스피드 핵 방지
      : 알로리즘은 많지만, 주지적인 타이머 비교로 스피드 핵을 방지 한다.
 
  4) 클라이언트 파일 위/변조 방지
      : 패킹 및 인증키 암호화 삽입을 물론, 주기적으로 서버에서 클라 파일의 유호성을 탐지한다.)
 
  5) 네트워크의 패킷 암호화
      : 패킷을 캡쳐하여 위/변조 방지
 
  6) 패킷 구조 변경이 쉽도록 프로토콜 설계/구현
      : 기본 패킷에 더미 값을 이리 저리 넣어서 특정 값이 안 나오도록 유지
 
  7) 송수진 데이터는 구조체로 정의
      : 구조체 멤버 변수를 코드에서 offset하는 것은 금지, 변수명을 참조하는 형태로 한다.
 
  8) 암호화 클라이언트
      : 암호키와 알고리즘은 주기적으로 변경
 
  9) 로그파일은 GUID방식으로 작성한다.
      : Logviwer를 통해서만 볼수 있도록 설계/구현
 
  10) 주요 메모리 보호
      : 전연 변수는 꼭 Allocation시키고, 구조체/클래스는 주기적으로 변경한다.
 
  11) 자동 로봇 응대 방식 개발
      : 자동 로봇을 사용하는 유저를 가리기는 쉽지 않다. 항상 새롭운 접근으로 응대하라.
 
  12) 주요 스트링 암호화
      : DLL export 했을대 판독을 힘들게 한다.
        함수명을 #define 정의 하여 사용한다. (쌩뚱맞은 클래스를 콜하고 그것을 정의 하여 사용)
 
  13) 릴리즈 모드에서는 옵션에서 꼭 Debug Info 을 제거한다.
 
  14) 하드 코딩된 문자열은 리소스에 껴 넣는다.
 
  15) 파일 및 계정 접근의 권한 최소화.
      : 꼭 필요한 권한만 준다. 전역 공유 객체 사용 자제, NT Archtecture도 효과적이다.
 
  16) 클라는 패킹 후 배포 (당연한 이야기 일지도)
      : Intial Vector값이 있다면 주기적으로 변경
 
  17) 파일의 위/변조 방지 기능을 삽입한다.
 
  18) 런처 스스로도 위/변조 방지 한다.