- [Dreamhack] Dream Beginner_About War game2024년 05월 26일 16시 42분 41초에 업로드 된 글입니다.작성자: sonootri
이번 챕터에서는 워게임은 무엇이고 어떤 목적을 가지고 문제를 풀게 되는지 설명한다. 또한 드림핵에서 제공되는 워게임은 어떻게 푸는지 살펴볼 것이다.
1. Wargame
워게임이란, 의도적으로 취약점이 존재하도록 설계된 모의 해킹 환경이다.
워게임은 하나의 시험문제라고도 볼 수 있는데, 제작자가 설계한 취약점을 찾아내고 그것을 이해하고 해결책을 찾아내는 과정을 거쳐 '플래그'를 찾아내는 과정이기 때문이다.
실제 상용화 되고 있는 프로그램이나 운영체제를 초보자가 처음부터 해킹하는것은 불가능에 가깝기 때문에, 사이버 보안 공부를 시작하는 사람들은 보통 워게임을 시작으로 한다. 워게임의 난이도는 다양하며 일반적으로 웹, 포너블, 리버싱, 암호학 등의 카테고리로 나뉘어있다.
초보자라면 문제 풀이 강의가 없는 워게임을 어떻게 시작해야 할지 모르거나, 강의를 이해하는데 어려움을 겪을 수 있다. 이는 워게임에 익숙하지 않거나, 문제 해결에 필요한 배경지식이 부족하기 때문이다. 이는 컴퓨터 과학을 공부하거나 많은 워게임 삽질을 통해 개인적으로 극복해야한다. 워게임을 많이 풀고 공부를 계속하면, 이 과정에서의 즐거움을 느낄 수 있게 되며, 어려운 문제를 마주치는 횟수도 점차 줄어들 것이다!(그랬으면 좋겠다....)
2. Flag
흔히 볼 수 있는 해킹 방어 대회의 일반적인 형식은 CTF(Capture the Flag)이다. 공격 대상인 시스템에 존재하는 파일을 Flag라고 하며, 이 파일의 내용이 공격자, 즉 우리가 제출해야 하는 답안이 된다.
해커들은 시스템 해킹에 성공하면, 성공했다는 증거를 남길 것이다. 그렇다면 해커들은 시스템을 성공적으로 해킹했다는 증거를 제시할 때 어떤 방법을 선택할까? 보통은 모든 OS에 기본적으로 설치된 프로그램 중 하나인 계산기를 실행시킨다. 기본 프로그램인 계산기를 실행시킨다는 것은, 해커가 기본적으로 어느 프로그램이든 실행시킬 수 있다는 것을 의미하기 때문이다. 혹은 계산기 대신 셸을 실행시킬 수도 있다.
하지만 CTF와 같은 대회에서 매번 번거롭게 계산기를 띄운 화면을 캡쳐한다면 굉장히 번거로울 것이다. 그래서 해커들은 가장 간단한 형태의 제출물이 될 수 있는 어떤 텍스트를 답으로 쓰기로 했다. <드림핵>에서 사용하는 플래그는 보통 DH{ }형식의 중괄호 사이에 해시값(숫자와 abcd로 이루어져 있는)이 있는 형태이며 그렇지 않은 경우도 있다.
대부분의 CTF나 워게임에서는 암묵적으로 플래그를 찾는것이 최종 목표이며, 어떤 수단을 동원하든 상관 없다.
3. Write Up
CTF 또는 워게임 문제에서 플래그를 찾는 과정, 즉 문제 풀이 과정을 정리한 것을 라이트업이라고 한다. 스스로 라이트 업을 작성하는 과정을 거치면 문제를 더욱 정확히 이해하고 공부할 수 있다. 또한 대부분의 대회에서는 문제를 제대로 풀었는지 확인하기 위해 라이트업을 요구한다.
4. 문제를 풀지 못했는데 Write Up을 봐도 괜찮을까요?
위 체크리스트는 풀이자가 문제를 풀 때 순차적으로 하는 일이다. 주어진 대상을 분석하고, 취약점을 찾고 이를 공략하는 과정을 거치는 것이다.
이 중 1번은 풀이 없이 수행하는 것을 권장한다. 전체적인 프로그램의 분석은 풀이마다 다루는 정도가 상이하며 보통은 간략하게만 짚고 넘어가기 때문이다. 또한 개인 편차라는 것이 존재하기 때문에, 본인만의 기준을 정하고 가능한 지키는 것이 가장 이상적인 방법이다.
5. 워게임 준비물
드림핵의 워게임을 풀기 위한 준비물은 Linux/ Ubuntu환경 구성 그리고 nc(netcat)이다.
6. 간단한 워게임 풀어보기
1) 문제 정보
가장 먼저 문제 정보로 주어진 Description을 읽어야 한다. 보통 문제에 대한 설명이나 힌트, 참고 링크등이 제공되며 아무 것도 제공되지 않을수도 있다.
2) 접속 정보
드림핵 워게임의 대부분은 VM을 통해 문제 환경에 접속한다. '서버 생성하기' 버튼을 누르면 VM이 요청된다. 그러면 이후 VM 접속 정보가 출력되는 것을 볼 수 있다.
접속 정보의 상단에는 Figure 1과 같은 Host, Port 정보를 출력하고 하단에는 Figure 2와 같이 접속 방법을 출력한다.
3) 접속 방법
문제에 접속하는 방법은 2가지로 나뉜다. nc를 사용하여 접속하는 방법은 익숙하지 않을 수 있다. 이는 다음 챕터에서 다루도록 하겠다. 이번 워게임에서는 nc 명령어를 통해 접속한다.
- http로 접속하기: 브라우저에서 http://Host:Port 링크의 문제 환경에 접속한다. 대부부분의 웹 해킹 문제는 이 방법을 사용한다.
- nc로 접속하기: nc Host Port 명령을 통해 문제 환경에 접속한다. 대부분의 포너블 문제는 이 방법을 사용한다.
형식은 nc Host Port 를 따르는 것을 확인할 수 있다. Port는 앞쪽 번호를 사용하는 것 같다....왜...?
4) 문제 파일
문제 파일 받기 버튼을 클릭하면 압축 파일이 다운로드 된다. 압축을 해제하면 문제를 푸는 데 필요한 소스 코드 등의 파일이 있다. 문제를 분석하고 플래그를 얻기 위해서는 주어진 파일들을 잘 살펴보는 과정이 필요하다.
본 워게임의 코드는 단순히 플래그를 출력하는 코드이니 자세히 볼 필요가 없지만, 앞으로 문제에서 소스 코드가 주어지면 분석을 통해 어떤 동작을 수행하는지 파악하는 것이 필수이다!
// Name: chall.c // Compile Option: gcc chall.c -o chall -fno-stack-protector #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define FLAG_SIZE 0x45 void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main(void) { int fd; char *flag; init(); // read flag flag = (char *)malloc(FLAG_SIZE); fd = open("./flag", O_RDONLY); read(fd, flag, FLAG_SIZE); char cmp_str[10] = "Dreamhack"; char inp_str[10]; printf("Enter \"Dreamhack\" : "); scanf("%9s", inp_str); if(strcmp(cmp_str, inp_str) == 0){ puts("Welcome Beginners!"); // print flag puts(flag); } return 0; }
5) Flag 제출
드림핵 공식 워게임의 플래그는 기본적으로 DH{ 해시값 } 형태이다. 이때 중요한 것은, DH{ }까지 포함해야 한다는 것이다.
다음글이 없습니다.이전글이 없습니다.댓글