Review

2018 Hacking Festival[악성코드]

D4tai1 2018. 12. 28.

※ 학교 내에서 1학년이 참가하는 대회로 기초지식 내 문제를 출제하였다.

※ 지식을 전달보다 시야를 넓히는데 목적이 있었다.

※ 이 문제가 왜 악성코드문제냐고 물어보면... 어느정도의 고민 후에 사용자가 의도하지 않는 동작을 하니까..?


1. 악성코드

1) 서론

▶ 흔히 악성코드문제는 리버싱 능력이나 실제 프로그램이 돌아가는 동작 중 나쁜?짓을 하는 부분을 찾는 문제 중 하나이다.

▶ 그러나 리버싱이 기초지만 그 기초를 하기 위해 더욱 기초가 되는 부분이 많고 1학년에서 이 부분까지 다루지 않았기 때문에 이런 식으로 동작하는 것도 있구나.. 정도로 시야를 넓혀주고 싶었다.

▶ 이 문제가 나오게 된 이유 중 하나는 다른 사람 컴퓨터에 장난을 치면서 시작되었다.

▶ 문제는 특별한 지식없이 누구나 풀 수 있을만한 문제이다.


2) 소스

 [1] new folder.bat

@echo off

set count1=0
set number=1

:main
 set pass=
 set random_char=abcdefghijklmnopqrstuvwxyz0123456789!@#^()-+
 set cnt=0
 
 :start1

  set /a num = (%random% %% 44)

  call set char=%%random_char:~%num%,1%%

  set pass=%pass%%char%
  
  set /a cnt=%cnt%+1

 if %cnt% lss 20 goto :start1
 
 md %number%%pass%
 cd %number%%pass%
 set /a number=%number%+1
 rem timeout 1

 set count2=0

 :first
  set pass=

  set cnt=0
  
  :start2

   set /a num = (%random% %% 44)

   call set char=%%random_char:~%num%,1%%

   set pass=%pass%%char%

   set /a cnt=%cnt%+1

  if %cnt% lss 20 goto :start2
 
  md %number%%pass%
  cd %number%%pass%
  set /a number=%number%+1
  
  set count3=0
  
  :second
   set pass=

   set cnt=0
   
   :start3

    set /a num = (%random% %% 44)

    call set char=%%random_char:~%num%,1%%

    set pass=%pass%%char%

    set /a cnt=%cnt%+1

   if %cnt% lss 20 goto :start3
  
   md %number%%pass%
   cd %number%%pass%
   set /a number=%number%+1 
   
   set count4=0
   
   :third
    set pass=

    set cnt=0
    
    :start4

     set /a num = (%random% %% 44)

     call set char=%%random_char:~%num%,1%%

     set pass=%pass%%char%

     set /a cnt=%cnt%+1

    if %cnt% lss 20 goto :start4
   
    if %number%==110 (
     md S
    )
    if %number%==147 (
     md H
    )
    if %number%==230 (
     md E
    )
    if %number%==280 (
     md R
    )
    if %number%==320 (
     md A
    )
    if %number%==350 (
     md T
    )
    if %number%==528 (
     md T
    )
    if %number%==620 (
     md E
    )
    if %number%==679 (
     md W
    )
    if %number%==747 (
     md E
    )
    
    md %number%%pass%
    cd %number%%pass%
    set /a number=%number%+1

    cd ..    
    set /a count4=%count4%+1
   if %count4% lss 5 goto :third

   cd ..   
   set /a count3=%count3%+1
  if %count3% lss 5 goto :second

  cd .. 
  set /a count2=%count2%+1
  
 if %count2% lss 5 goto :first
 
 cd..  
 set /a count1=%count1%+1
 
 rem echo %count1%
if %count1% lss 5 goto :main

  ▶ 위 소스는 처음에 작성하면서 따로 게시하려고 한 것이 아니기 때문에 변수명이나 이런부분에 대해서 세밀한 부분을 신경쓰지 못했기에 이 부분을 고려하면서 보기를 바란다.


  ▶ 윈도우 배치파일 형태로 작성되었다.


  ▶ 위 소스는 랜덤한 글자(영소문자, 특수문자일부, 숫자) 20자를 저장하고 이 글자로 새로운 폴더를 생성하는 것이다.


  ▶ 실행시켜보면 5개의 폴더가 있고 하나를 들어가보면 또 5개의 폴더가 있고 아무거나 하나를 들어가보면 또 5개의 폴더가 있는... 폴더마다 자식폴더를 5개씩 낳고 있다.. 그것도 작명도 이상하게 만들어서... 사용자가 원하지 않는데...


  ▶ 폴더 앞에는 폴더 개수를 의미하는 숫자를 붙여주었다.


  ▶ 110, 147, 230, 280, 320, 350, 528, 620, 679, 747 번호가 붙은 폴더가 있는 곳에는 추가적으로 단어가 하나 적혀있는 폴더가 생성된다.


  ▶ for문[Ex)for /L %%i in (1,1,5) do ()]을 사용하지 않고 구지 goto문을 사용한 이유는 for문의 경우 매번 변하는 시간을 사용하기 위해 time명령어를 사용했으나 for문이 한 번 들어갈 때 저장한 그대로 변하지 않았고 변하지 않는 시간은 의미가 없기 때문에 goto문을 사용하였다. 그러나 현재는 시간대신 번호로 카운터하고 있다. 


3) 실행파일로 변환

  ▶ 만약 배치파일 형태로 제공될 경우 소스를 확인할 수 있고 실행 시 콘솔창이 뜨면서 기분나쁜?폴더명을 가진 폴더가 생길 경우 콘솔창을 끌 가능성이 있기 때문에 실행파일 형태로 배포하려고 한다.


  ▶ bat_to_exe_converter를 사용하여 변환하였다.


  ▶ 위 그림와 같이 확장자명을 평소에 표시하지 않는 일반사용자의 경우 실행파일 명이 "새 폴더" 라고 나올 것이다.


  ▶ 그런데 생긴거부터 왠지 기분나쁘게? 생겼고 열면 안될 것 같은 느낌이 먼저 든다..


  ▶ 실제로 "새 폴더"를 더블클릭할 경우 많은 양의 폴더가 폴더 안에 자식을 낳고 그 자식폴더도 자식을 낳게 된다.


  ▶ 이 과정은 백그라운드에서 돌아가며 실행 시 사용자가 볼 때에 아무런 동작이 하지 않는 것처럼 느껴진다.


  ▶ 알려진 확장자명을 숨기지 않도록 하는 사람의 경우는 "새 폴더.exe"로 나올 것이다.



4) 풀이방법

 [1] 문제를 푸는 방법은 폴더 내에 특별한 폴더를 찾고 그것을 조합하면 되는 매우 간단한 문제이다.

 [2] 특별한 폴더 확인

  ▶ 탐색기를 트리구조로 보면서 계속 열어보아도 되고 속성을 확인해서 폴더별로 차이점이 있는지 확인해보아도 좋다.


  ▶ 실제로 폴더의 개수가 뭔가 하나 더 있는 폴더가 있는 것 같고.. 이런식으로 찾아들어가니..


 [3] 다른자식의 폴더?

  ▶ 위 그림과 같이 다른자식이 낳은 느낌의 폴더가 하나 쏙 있다.

  ▶ 이쯤 눈치챘으면 상위디렉터리에서 a~z까지 검색을 하거나 눈치를 못 챘다면 폴더란 폴더는 다 찾아볼 것이다.


 [4] 애너그램

  ▶ 어떤 방식으로든 10개 알파벳을 다 찾았으면 그것을 조합해서 단어 하나를 만들면 된다.

  ▶ 애너그램(단어를 가지고 나올 수 있는 단어는 모두 조합해서 보여준다.)을 이용해서 해결하기를 바랬다.

  ▶ SWEETHEART이라는 단어가 정답이 된다.

  ▶ 원래는 애너그램이 아닌 파일 생성시간을 기준으로 조합하는 방식으로 출제하려고 했었으나 포렌식분야의 문제 쪽으로 가는 느낌이 들어서 수정하게 되었다.


 [5] 출제방향

  ▶ 원래 문제의 모티브가 된 배경이 있다.

  ▶ 참고 :


 [7] 느낀점

  ▶ 악성코드는 자기자신을 계속 재호출하거나 돌연변이를 찍어내거나 하는 등의 악성코드가 무서운 것 같다.

  ▶ 문제가 낯썬지 실행파일을 클릭만 해보고 처음에 시도하다가 모르겠어서 다른문제를 푸는 사람이 많았다.

  ▶ 한 명도 푼 사람이 없어서 폴더별 속성을 확인하라는 힌트를 주니 대부분의 참가자가 맞추었다.




'Review' 카테고리의 다른 글

2018 Hacking Festival[게임문제]  (0) 2018.12.24

댓글