Saturday, July 12, 2014

CTF là gì?

CTF là gì?
CTF là viết tắt của Capture The Flag, và bằng vốn tiếng Anh kinh dị của mình thì nó có nghĩa kiểu kiểu như là Lấy cờ, Tìm cờ (giống trò chơi hồi bé, nhắm mắt đếm 5, 10, 15, 20, 25…, cho đến 100 thì bắt đầu đi kiếm mấy đứa đang ẩn nấp khắp mọi nơi ấy). Cờ ở đây thường là một đoạn văn bản, mà có thể được kiểm tra tự động. Ví dụ:
  • DayLaCo
  • yeuchimse_hinh_nhu_rat_dang_yeu
  • c41_n4y_cung_g01_l4_c0
Tức là, nếu quy ra cuộc sống tự nhiên, CTF tương tự như việc chúng ta được thả vào một căn phòng, và nhận yêu cầu: “Hãy tìm cho tôi một cái gì đó”. Cái gì đó ở đây (tức cờ), có thể được quy định sẵn về hình dáng của nó (như flag{abcdef}ctf_this_is_flagchẳng hạn), hoặc không có thông tin gì kèm theo, khi đó chúng ta sẽ phải dựa theo cảm giác, rằng khi thấy một cái gì đó lạ lạ, thì nó rất có thể là cờ. 
Capture The Flag (CTF) là một loại đặc biệt của các cuộc thi an toàn thông tin. Thường có ba dạng CTFs đó là: Jeopardy, Attack-Defence và kết hợp giữa hai loại đó.Các cuộc thi CTFs được thiết kế để thử thách người tham gia trong việc tổ chức, phản ứng với các loại tấn công được tìm thấy trong thực tế. Để hoàn thành cuộc thi rất nhiều các kĩ năng cần phải có, như là:Reverse-engineering, network sniffing, protocol analysis, system administration, programming, cryptanalysis... Do đụng chạm đến nhiều kĩ năng như vậy cho nên đội nào có các thành viên có kĩ năng và kinh nghiệm trải đều trên các kĩ năng khác nhau thì cơ hội chiến thắng sẽ cao nhất.+ Jeopardy style: cuộc thi sẽ có một tập hợp các câu hỏi (vấn đề) cần giải quyết, các câu hỏi này được sắp xếp vào các loại khác nhau, ví dụ như Web, Forensic, Crypto, Binary hoặc là cái gì đó... trong mỗi loại này các câu hỏi lại được sắp xếp theo thứ tự tăng độ khó (cũng là thứ tự tăng dần điểm số). Các đội sẽ giải các câu hỏi này và lấy được điểm của câu hỏi đó. Đến cuối cùng đội nào dành được nhiều điểm nhất trong thời gian ngắn nhất sẽ là đội đứng đầu. Cuộc thi nổi tiếng nhất cho dạng CTF Jeopardy là DEF CON CTF Qualifier(Offical URL: https://legitbs.net/).
 Vừa rồi cũng vừa mới diễn ra cuộc thi này của năm 2013 (http://2013.legitbs.net) và đã có một đội của Việt Nam lọt vào top 12 (đó là đội CLGT - Cửu Long Giáng Thế) và sẽ được tham gia cuộc thi DEF CON CTF (cuộc thi này dạng Attack-Defence chứ không phải Jeopardy) tại Last Vegas tới đây.+ Attack-Defence: dạng này thì mỗi đội sẽ được cung cấp riêng một máy chủ (hosts) hoặc một mạng riêng (network) mà chúng chứa các lỗi bảo mật (vulnarable services). Nhiệm vụ của các đội là vá lỗi bảo mật của mình đồng thời tấn công vào hệ thống của đối thủ. Bảo mật tốt sẽ được điểm Defence và tấn công tốt sẽ được điểm Attack. Cuộc thi nổi tiếng nhất về dạng này là DEF CON CTF (được xem như là World Cup của các cuộc thi CTF - Offical URL: http://ddtek.biz/).
Các bạn có thể tìm hiểu nhiều hơn về CTF tại trang: https://ctftime.org/Ở trang web này có tất tần tật mọi thứ về CTF, đây là trang lưu trữ của các cuộc thi CTF. Các bạn có thể tìm thấy các thông tin như: các cuộc thi đã diễn ra, sắp diễn ra, thứ hạng của các đội, các bài viết (writeups) của các đội sau khi đã giải quyết được các vấn đề trong cuộc thi ...blah....blah....

Cụ thể với WhiteHat CTF 2013, cuộc thi chia ra các mảng là Web, Crypto, Reverse, Forensic và Exploit. Mình sẽ minh họa với bài I love Sherlock Holmes, thuộc mảng Crypto.


Nội dung chính
Đề bài, chúng ta được cung cấp 1 file hình như sau:
Không có gì khác, tất cả chỉ vậy thôi, cũng không nói rằng chúng ta phải làm gì.
Đó chính là điều các bạn cần lưu ý, vì trừ trường hợp đặc biệt, còn lại thì chúng ta hiển nhiên cần hiểu rằng mọi bài sẽ có một đòi hỏi duy nhất, đó là tìm ra cờ, và submit kiếm điểm. Thay vì viết là: “Tìm x sao cho: x + 1 = 2″, chúng ta chỉ cần một cái đề: “x + 1 = 2″ cũng đã coi như quá đủ!
Trở lại với công việc, nếu bạn đã từng đọc Holmes (mình thì khỏi nói, mình vô cùng cuồng Holmes và mỗi ngày hầu như đều đọc đi đọc lại mấy mẩu chuyện đã thuộc nằm lòng), thì bạn sẽ nhận ra ngay đây là phương pháp mã hóa xuất hiện trong vụ án “Những hình nhân nhảy múa”, tiếng Anh là Dancing Man. Ở vụ án này, Holmes dựa theo tần suất xuất hiện của từng chữ cái để dần dần suy ra bảng mã tham chiếu hoàn chỉnh. Chúng ta may mắn hơn Holmes, vì chúng ta có Google. Google biết mọi thứ, đó chính là niềm tin của mình sweet_kiss
Search một lúc, ta có bảng mã cho Dancing Man như sau:
Đơn giản là đối chiếu đề bài với bảng mã tìm được, chúng ta có dãy ký tự:
RHNTKXTMTEXGMXWWXVMBOX
Nó có phải là cờ không?
Tất nhiên là bạn có quyền thắc mắc như vậy, dù rằng thông thường cờ sẽ không vô nghĩa và xấu xí đến thế  emo_popo_sweat
Khỏi cần thắc mắc dài dòng làm gì, submit thử thì biết chứ có gì đâu.
Wrong!
Đổi sang chữ thường và submit lại.
Wrong!
emo_popo_pudency Đây có lẽ chính là điểm dừng của một số đội chơi khác, vì một lý do quá kinh khủng: không biết phải làm gì nữa emo_popo_beat_plaster

RHNTKXTMTEXGMXWWXVMBOX

Sau khi rà soát lại để chắc chắn rằng không đối chiếu nhầm ở đâu đó, chúng ta sẽ quên hết mọi thứ trong quá khứ, và coi như đề bài chỉ bắt đầu từ cái dòng ký tự xấu xí này mà thôi.
Có khá nhiều hướng khi giải quyết một bài crypto, như XOR các byte với một giá trị x nào đó, cộng thêm một giá trị y nào đó vào từng ký tự, xoay vòng các ký tự theo độ lệch z (cũng nào đó), hoặc phổ biến không kém, đó là hoán vị các ký tự (A thành S, B thành E, C thành X…), và nhiều rất nhiều thuật toán từ cơ bản đến nâng cao khác.
Hướng XOR ít khả thi, do chuỗi ta đang có rất đẹp (đẹp ở đây tức nó đều bao gồm các ký tự chữ cái), mà XOR thì không có đặc tính giữ lại độ đẹp của mật mã sau khi được giải mã (dù rằng một vài giá trị khi dùng làm khóa cũng mang lại điều này). Tuy nhiên, chúng ta vẫn sẽ giữ lại nó trong đầu như một phương án dự phòng.
Cộng thêm giá trị vào các byte, đây là một hướng tốt, có thể thử. Nhưng do mật mã có cả X và B, nên cộng thì cũng dở mà trừ thì cũng dở (vì chắc là nó vượt ra ngoài 2 biên của bảng chữ cái), xếp nó sau XOR theo độ ưu tiên vậy.
Xoay vòng các ký tự (còn gọi là Caesar): Hướng này vô cùng khả thi, do là xoay vòng, nên X + 3 = Z + 1 sẽ quay về A, nên đảm bảo rằng kết quả mã hóa cũng đẹp y như mật mã vậy. Hãy quan tâm đến nó một chút.
Hoán vị các ký tự, hướng này có thể loại ngay, do mật mã quá ngắn, không đủ cơ sở để suy luận.

Caesar

Vấn đề tiếp theo cần đối mặt, đó là nếu chọn Caesar, thì xoay với độ lệch bao nhiêu? Phổ biến thì chúng ta biết đến Rot13 (A sẽ chuyển thành N, B sẽ chuyển thành O, C sẽ chuyển thành P, và ở chiều ngược lại, N sẽ chuyển thành A, O sẽ chuyển thành B, P sẽ chuyển thành C).
Với bài này, Rot13 cho ra kết quả không đẹp:
Rot13(RHNTKXTMTEXGMXWWXVMBOX) = EUAGXKGZGRKTZKJJKIZOBK
Xấu như gấu emo_popo_beat_shot
Nhưng Rot13 chỉ là cái người ta hay dùng, và thực tế thì mình đã gặp không ít bài mà người ta Rot16 phút, Rot69, thậm chí Rot linh tinh loạn cả lên. Mà cũng chẳng sao cả, chúng ta có thể dùng một vài tool trên mạng, hoặc tự code vài dòng để có được kết quả của tất cả các phép Rot từ 1 đến 26, và xem xem có kết quả nào khả quan không:
Rot1: SIOULYUNUFYHNYXXYWNCPY
Rot2: TJPVMZVOVGZIOZYYZXODQZ
Rot3: UKQWNAWPWHAJPAZZAYPERA
Rot4: VLRXOBXQXIBKQBAABZQFSB
Rot5: WMSYPCYRYJCLRCBBCARGTC
Rot6: XNTZQDZSZKDMSDCCDBSHUD
Rot7: YOUAREATALENTEDDECTIVE
Rot8: ZPVBSFBUBMFOUFEEFDUJWF
Rot9: AQWCTGCVCNGPVGFFGEVKXG
Rot10: BRXDUHDWDOHQWHGGHFWLYH
Rot11: CSYEVIEXEPIRXIHHIGXMZI
Rot12: DTZFWJFYFQJSYJIIJHYNAJ
Rot13: EUAGXKGZGRKTZKJJKIZOBK
Rot14: FVBHYLHAHSLUALKKLJAPCL
Rot15: GWCIZMIBITMVBMLLMKBQDM
Rot16: HXDJANJCJUNWCNMMNLCREN
Rot17: IYEKBOKDKVOXDONNOMDSFO
Rot18: JZFLCPLELWPYEPOOPNETGP
Rot19: KAGMDQMFMXQZFQPPQOFUHQ
Rot20: LBHNERNGNYRAGRQQRPGVIR
Rot21: MCIOFSOHOZSBHSRRSQHWJS
Rot22: NDJPGTPIPATCITSSTRIXKT
Rot23: OEKQHUQJQBUDJUTTUSJYLU
Rot24: PFLRIVRKRCVEKVUUVTKZMV
Rot25: QGMSJWSLSDWFLWVVWULANW
Nếu tiếng Anh của bạn cũng siêu đẳng như tiếng Anh của mình, bạn sẽ thấy ngay Rot7 là cái mà ta đang tìm, kết quả thu được thực sự quá đẹp:
YOUAREATALENTEDDECTIVE
Nó đẹp đến nỗi mà nó đã có thể là cờ rồi, mình đặt niềm tin với tỉ lệ đặt 6 ăn 9 emo_popo_sure

Wrong!

Wrong!

Wrong!


emo_popo_waaaht  surrender
A du kít đinh mi ops
À hông có sao, còn chữ thường, vẫn còn chữ thường nữa mà emo_popo_cry
youareatalenteddective

Correct :)

Tổng kết

Như vậy, là mình đã vừa giới thiệu một vài điểm sơ qua về CTF, cũng như trình tự suy luận của mình đối với một bài thi cụ thể. Kiến thức là rất rộng (và sâu), nên chắc chắn rằng chúng ta sẽ luôn phải học hỏi hăng say nếu không muốn bị bỏ lại đằng sau và mau mau rớt hạng. Nếu bạn có gì đó không hiểu, hoặc bực mình vì chẳng biết XOR, Caesar nó là cái khỉ gì cả, thì hãy yên tâm, không ai sinh ra đã biết cộng trừ nhân chia đâu. Bạn còn rất nhiều cơ hội để tìm hiểu và tích lũy kinh nghiệm. Bạn có thể là người xuất phát muộn hơn, nhưng không ai có thể ngăn cản việc bạn về đích sớm hơn cả.
Chào mừng bạn đến với CTF! emo_popo_beauty

No comments:

Post a Comment