1년 반만에 포스팅 한다.

ETRI 인턴 이후 BoB7기 보안컨설팅 트랙에서 공부를 했다.
거기서 CISA를 알게됐고, 18년8월쯤 시험을 준비하려고 마음만 먹었다. 그리고 미루다 미루다 19년 5월까지 왔다. ㅋㅋ

19년 5월 23일 CISA의 2016년스탠다드 시험이 마지막으로 진행된다.
즉 기존 Window 제도가 폐지되고 상시 응시로 바뀌면서 6월부터 2019년스탠다드로 시험이 리뉴얼된다.

중고 책 구매하시는 분들은 이점 꼭 참고해서 라이지움 책을 구매하시길 바란다. 정말 중요하다.

점수는 511점이 나왔고, 대학생이라서 PASS자격으로 유지하며, 3년 뒤 총 5년의 경력인정이 될 때 공식신청을 하면 된다고 알고있다.

공부방법 및 팁

0.준비

  • 인터넷 강의 비용은 약 70만원이다. 6개월정도 시청이 가능하다.
  • 현재 환율기준(19년5월) 시험등록에 약 73만원 정도 들었다.
  • 즉 인강+시험등록에만 150만원가량 필요하다.

1.라이지움 인터넷강의

  • 인터넷 강의는 1.5배로 딱 1회씩 봤다.

2.교재

  • 인터넷 강의를 수강할 때 영상에서 같이 진도나가는것 외에는 따로 공부하지 않았다.
  • 5월 8일쯔음? 부터 급하게 다시 공부한거라서, 교재를 추가로 다시 볼 시간이 없었다.
  • 아 물론 1600제를 풀다가 모르는 것이 있을때는 교재를 다시 살펴보긴 했다.

3.1600제

  • 인강에서 1600제를 2~3번은 꼭 봐야한다고 해서, 처음엔 3회독으로 목표를 잡았다.
  • 문제 푸는방식은 A4용지를 4등분해서 설명과 답부분을 가리고 문제를 머릿속으로 푼 뒤, 밑에 설명과 답을 확인하는 방식으로 진행했다.

  • 1회독 때는 모든 문제와 모든 설명을 읽으면서 설명에는 빨간줄을 치면서 풀었다.
  • 2회독 때는 모든 문제를 똑같이 가리고 풀었고, 틀린 문제는 번호에 따로 형광펜으로 표시했다. 1회독과 달랐던 점은 문제를 풀었을 때 확실히 왜 답인지 아는 문제는 따로 설명을 보지 않고 넘어갔다.
  • 3회독은 거의 못했다. 시험 전날 2회독을 마무리했고, 3회독은 시험장까지 가는 지하철과, 시험 대기시간 동안 형광펜으로 표시한 문제만 확인했다.

4.시험장

  • 처음엔 솔데스크에서 보려고 했지만, 자리가 없어서 문정역 SRTC에서 봤다.
  • SRTC가 있는 건물 자체가 얼마 안된곳이라 그런지, 시험장 내부도 굉장히 깨끗했다. 그렇게 크지는 않았지만, 충분히 깔끔하고 시험보는데 문제가 없는 곳이였다.
  • 시험보러 갈 때는 신분증과, 신용카드(체크카드)를 가져가면 된다. 카드는 영문 이름을 확인하기 위함이라고 한다.

5.시험과정

  • 150문제를 쭉 푸는데, 헷갈리는 문제는 깃발을 꼽아서 다시 확인할 수 있다. 시간은 총 4시간이며 책상에 컴퓨터모니터, 마우스, 키보드가 존재했다. 필기할 수 있는 연필과 종이도 있었다.
  • 웬만한건 깃발을 꼽지 않았고, 150번까지 풀고나니 깃발이 약 10개정도 있었다. 150번까지 다푼 뒤 깃발문제를 약 4문제정도 수정하고, 나머지는 처음 답 그대로 했다.
  • 생각보다 IT기술이나 인프라에 대한 디테일한 문제는 별로 없었고, 대부분 감사인의 입장에서 푸는 문제가 많았다.
  • 시간은 총 97분 걸렸고, 검토를 해보려다가 오히려 생각이 많아져서 오답으로 고칠까봐 그냥 바로 제출했다.

  • 시험장에는 CISA를 보러온 분이 약 20분정도 계셨다. 그중에 1등으로 나갔다 ㅋㅋ 150문제를 다 풀고, 설문조사 11개를 끝내면 바로 합격여부를 알 수 있다.
  • 화면에 ‘~~~통과 하셨습니다.’ 라고 뜨며, 약 10일후에 공식 점수가 나온다고 한다.

6.팁

  • 1600제를 풀면서 모르는 개념이나 단어가 나오면 모두 따로 적어놓도록 한다. 그리고 해당 단어들을 교재에서 찾아 관련 개념을 다시한번씩 읽으면 좋은거같다.
  • 1600제가 핵심인데, 나는 보토 하루에 350~500 문제씩 풀었다. 그리고 웬만하면 한번 앉았을 때 150문제 풀고, 쉬고 풀고 반복하길 추천한다.
  • 그 이유는 실제 시험 때 150문제를 한번에 풀려고 하면 집중력이 떨어질거 같았고, 이를 방지하기 위해 항상 1600제를 풀 때 100~150문제씩 풀며 실전 연습을 했다.
  • 강의와 교재를 보는 기간을 제외하고, 1600제를 느긋하게 한달정도 잡고 공부하는걸 추천한다. 의외로 문제가 많으며 3회독 하는데 시간이 걸린다. 모든 문제와 설명을 3회독 한다면 100% 합격이다.

  • 시험 볼 때 한번에 딱 이게 답이다 하는건 50개정도고 나머지는 정답처럼 보이는게 2개씩 존재했다.

  • 그 중에서 더 중요하거나, 포괄적인 의미를 갖고있거나, 감사인의 입장에서 중요한, 그리고 현실적인? 보기를 정답으로 골랐다.

  • 난이도가 정말 높은 시험은 아니라고 생각하지만, 워낙 시험 준비하는데 돈도 많이들고 명확한 답이 잘 안보이는 시험이니까 꾸준함이 필요하다.

  • 문제가 이상하게 번역되는 경우가 종종 있는데, 한글인데도 문제가 이해 안된다. 그럴 때는 머릿속에서 문제를 영어로 번역해보면 의미가 느껴지긴 한다.

  • 나는 감사인이다 라는 마음가짐은 확실히 중요하긴 하다. 그리고 감사인이 뭐든 다하는 사람이 아닌 정말 조언자 역할을 한다는걸 이해하고 풀면 편하다.

오랜만에 블로그 포스팅을 한다.
뭐 솔직히 코드엔진 풀이보러 오는사람 아니면 유입도 안될테지만…
요즘 개발공부하느라 블로그를 너무 신경 못쓴거같다.

ETRI에서 연구연수생 할 때 만들었던 OpenVAS 사용 가이드다.
묵혀놓기 아까워서 올린다.
워드로 만든 문서인데.. 마크다운으로 다시 바꾸기 귀찮아서 캡처본으로 포스팅한다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

vsFTPD 란?

vsFTP (Very Secure FTP) 매우 안전한 FTP다. 기존 FTP의 수많은 취약점을 보완하기 위해 생긴 FTP로, 레드햇, Suse, Open-BSD 등 에서 기본 FTP로 채택하고 있다. 설정 파일의 문법이 매우 간단해서 관리가 쉬운 것이 장점이며 속도나 안정성 면에서도 탁월한 성능을 갖고있다.

NSE의 ftp-vsftpd-backdoor 스크립트는 CVE-2011-2523 취약점을 이용한 스크립트다. vsFTPd 2.3.4 버전의 백도어 취약점으로, 올바른 ID파라메터의 인자값을 exploit.cmd, ftp-vsftpd-backdoor.cmd 스크립트의 인수를 사용하여 변경할 수 있다.

1

우선 nmap -sV -p 21 <타겟> 명령어를 입력해서 타겟의 ftp포트의 상태와 버전정보를 확인한다

2

그리고 nmap –script ftp-vsftpd-backdoor -p 21 <타겟> 명령어를 입력하면 해당 취약점의 유무를 확인 할 수 있다.

3

스크립트 명령어를 사용 할 때, 와이어 샤크를 이용해 확인한 메타스플로잇 테이블과 연결 패킷 정보다. 가장 눈에 띄는 것은 6200번 포트가 vsFTPD의 백도어 포트로 사용된다는 것이다.

4

스크립트를 사용해서 취약점을 확인하고, 메타스플로잇의 vsftpd_234_backdoor 모듈을 이용해서 해당 취약점을 익스플로잇 해보겠다.

먼저 msfconsole 명령어를 입력해서 메타스플로잇 콘솔을 실행 한 뒤, use exploit/unix/ftp/vsftpd_234_backdoor 명령어를 입력해서 모듈을 실행시킨다. 옵션은 그림 3 6 과 같이 매우 간단하다. Set RHOST <타겟> 명령어를 입력해서 타겟만 설정해주면 된다.

5

옵션 설정을 해준 뒤, 익스플로잇 하면 커맨드 쉘 세션이 열린다. 6200번 포트를 연결 하는 것을 확인 할 수 있다.

쉘 세션을 열었으니 이를 이용해서 미터프리터 세션까지 열어보겠다.

6

우선 메타스플로잇의 msfvenom 을 이용해서 백도어를 생성한다.
대상이 메타스플로잇테이블2라서 리눅스 페이로드 설정해주고 elf파일로 생성했다.
elf 는 리눅스의 exe같은 개념이라고 보면 된다.

7

그리고 아까 쉘세션을 열었으니 그 쉘창에서 생성한 백도어를 다운 받기 위해 아파치 서버를 키고 메타스플로잇의 웹서비스 루트에 생성한 백도어를 복사했다.

8

백도어에 맞게 핸들러 설정을 해줬다.

9

모든 준비가 끝났으니 아까 열었던 쉘 세션에서 wget 명령어로 백도어를 다운로드 한다.
그리고 실행시키면 된다.

10

미터프리터 세션이 열렸다.
커맨드쉘 보다는 미터프리터가 더 다양한 기능을 갖고있다 다운로드나 업로드나 arp 등 많은 기능이 있기 때문에 미터프리터까지 열어주는게 좋다.
#끝

키콤백신은 파이썬2.7v 32bit 기반으로 만들어졌다.
따라서 따로 2.7버전 32비트 파이썬을 설치해서 실행해 줘야 한다.
깃허브 주소는 https://github.com/hanul93/kicomav 다.

그리고 pylzma-0.4.9 , yara 모듈을 설치해준다.
키콤백신은 현재 커맨드라인 버전으로 개발되어있다.

간단하게 옵션 설명을 하면
python k2.py . 옵션은 현재 폴더 검사를 의미한다.
python k2.py -l 옵션은 모든 결과를 보고싶을때 쓴다.
python k2.py -r 옵션은 암축 파일 내부 검사를 할때 쓴다.

일단 악성코드 분류를 먼저 해야한다.

첫번째 악성코드의 이름을 하나로 통일 하기 위해서 모든 파일명을 SHA256 이름으로 바꾼다.
xsha.py 스크립트를 이용해서 이름을 한번에 통일 할 수 있다.

명령어는
xsha.py src 폴더명 target 폴더명 이다.

1

명령어를 입력하면 그림처럼 SHA256으로 지정 폴더에 복사된다.

두번째 악성코드를 파일 포맷별로 분류한다.
fileformat.exe 를 이용한다.
명령어는
fileformat.exe src 폴더명 이다. 명령어 입력 후 기존 src폴더의 파일은 삭제해도 상관없다. 어차피 파일은 분류된 폴더로 복사된 상태기 때문이다.

2

명령어를 입력하면 그림 처럼 각 파일 형태별로 자동 분류가 된다.

3

이런식으로 target_mal 폴더가 있던 경로에 폴더별로 분류가 된다.
sha256으로 바뀐 이름의 앞 4글자를 하나하나 링크구조 폴더로 만들어서 분류한다.
꼭 fileformat.exe 를 이용해서 분류된 파일 포맷 기준으로 패턴을 추가해야 한다. 라고 대표님이 강조하셨다.

이제 분류된 파일중 하나에 대한 주요 정보를 확인해보겠다.
가장 기본적인 PE파일 분석을 해보겠다.
키콤백신의 –verbose 를 이용하면 된다.
명령어는
python k2.py 악성코드 –verbose 다.

4

PE구조에 대해 깔금하게 디스플레이가 되고 어떤 종류의 악성코드인지 판별해준다.

이제 이 정보를 가지고 패턴을 추가해보자.
우선 PE파일 악성코드를 진단/치료 하는 플러그인 엔진은 emalware.py다.
따라서 악성코드 패턴파일은 emalware.mdb로 저장되어야 한다.

패턴 형식은
검사 영억의 섹션크기:섹션의 MD5:악성코드 이름 # 주석문
형태로 저장해 준다. 예를 들면
1000960:df12e2e35405eefb59c24a94f3b14f4f:RiskTool.Win32.OfferInstall.heur # PE
이런 방식이다.
패턴 파일에 여러개의 패턴을 추가해주고 난 뒤에, sort.exe를 이용해서 정렬 해주는것 또한 잊지 말아야 한다.

정렬까지 끝낸 패턴을 마지막으로 빌드하고 생성된 4개의 파일
emalware.c01, .i01, .s01, .n01
를 source\Engine\plugins 경로에 넣어주면 패턴추가가 끝이난다.

빌드 방법은 sigtool_md5.py 스크립트를 이용하면 된다.
명령어는
sigtool_md5.py emalware.mdb 다.
5

최신 emalware.mdb 패턴 파일은
https://github.com/hanul93/kicomav-db 에 있다.

오래간만에 리버싱 해본다.
7번은 풀다가 짜증나서 던졌다.
문제 : Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가
힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)

1
일단 두글자라고 해서 “AA”를 입력했더니 글자수 부족 메시지가 뜬다. 문제에선 2글자라고 헀지만 나름 복잡하게 하기위해 몇글자 이하에 예외처리나 조건문을 걸어놓은 것 같다. 이부분을 해결하고 패스워드 비교부분 찾으면 끝나는 문제같다.
2

대놓고 문자열에 나온다.
please Enter MOre Chars… 문자열 바로 직전에서 S플래그 바꿔주면 글자수 부분은 넘어가진다.

3
적당히 브레이크포인트 걸어주고 구석구석 까진 아니고 입력한 AA의 아스키를 갖고 노는 듯한 함수내부에 들어가보니 AA의 아스키값을 갖고 이런저런 연산을 총 4번한다.
입력받은 name의 문자열을 갖고 key값을 만드는 부분으로 판단된다.

4
연산내용을 다 볼필요 없고 쭉쭉 진행하면 위와 같이 AA를 이용한 문자열이 생성된걸 확인 할 수 있다.
4번의 연산 결과값의 8비트중 앞부분 4비트만 따와서 만드는 문제라 그냥 코드로 저 연산 짜준다음에 아스키 1~a까지 전부 넣어주면 되겠지만 귀찮으니까 다른방법을 찾아봤다.
라고 했지만 그냥 코드 짜는게 가장 빠를것 같다.

5

첫번째 연산의 결과값은 F23ABBF0 이다.
위에서 본 AA의 첫 코드값과 앞4비트가 동일하다.
그럼 이 첫번째 연산만 아스키값으로 숫자 영대 영소 쭉 돌려서 정답 앞부분 값인
“5D88,+4비트” 뜨는 애를 찾으면된다..
아 그리고 두글자니까 name을 AB로 넣어서 ‘B’는 어느 연산에서 시작하는지도 찾아서 똑같이 코드짜면 된다.

6
AB로 넣어서 보니까 첫번째 연산에서 처음에는 A(41) 로 연산하고 그결과값에 두번째문자열B(42)를 넣어서 만드는걸 확인했다.
대신 00~zz까지 싹다 넣고 결과값의 앞4글자만 5D88과 비교연산 해줘서 출력해주면 끝!
이제 코드를 짜보자.

7
파이썬으로 대충 짜봤다.
0x30 (0) ~ 0x7A (z) 까지 모두대입한다.

8
5D88 이 -8:-4 인 부분 그냥 찾기로 검색해봤다 “ C6 “ 과 “ g3 “
두개의 결과가 나왔다.
스샷 찍고나서 봤는데 g3은 -9:-5다. C6만 딱맞음

8
글자수 제한하는 부분은 알아서 패치하고
C6을 넣었더니 정답이다

쉬운 문제지만 귀찮은 문제다.