2021년 8월 21일 진행된 전국 고등학생 사이버 보안 경진대회(ANUSEC 2021)에 Hyp3rFlow 팀으로 참가했습니다. 고등학생 3인 대회이므로, Hyp3rFlow에 마침 있던 고등학생 팀원 두 명(cgiosy, junseo)과 함께 참가하게 되었습니다.

실력이 많이 미약한 편이지만, Crypto 파트를 담당하여 풀기로 계획했습니다. cgiosy는 Web, junseo는 reversing이 없는 관계로 pwn을 보고 있었습니다.

대회 결과 총 37팀 중 7등을 하여 아쉽게 수상권에 들지 못했습니다. 아무래도 Crypto 파트에서의 시간 낭비와 알파벳을 의도한대로 읽지 못한 불운이 겹쳤고, pwn 파트에 익숙한 팀원이 없어 점수를 따지 못한 것이 원인이라고 생각합니다.

직접적으로 풀이에 관여한 것은 Crypto, Misc 파트의 문제였습니다.

Crypto - R u SmArt

여러 CTF에서 종종 보이는 RSA 드립이 제목입니다. 제목 역시 별다른 힌트를 주지 않고 있고, 디스크립션 역시 $N, e, C$가 전부입니다. 정말 아무런 힌트가 존재하지 않으므로 $d$를 직접적으로 찾는게 힌트일텐데, $e$가 작거나 지나치게 크지 않으므로 $e$에는 이상이 없을 것이라 추론했습니다. 따라서 $N$을 소인수분해하려 했고, Fermat Factorization을 이용해 쉽게 소인수분해할 수 있었습니다. (타원곡선을 활용해 소인수분해하는 풀이도 가능하다고 합니다.)

Crypto - Easy Peasy Diffie

제목에서 알 수 있듯 Diffie-Hellman에 관한 문제입니다. 역시나 별다른 힌트 없이 $p$의 값과 GF($p$) 상에서의 $g^a$, $g^b$, $g^c$ 값만이 주어져 있습니다.

별다른 단서를 찾지 못하던 중, $p,g^a,g^b,g^c$의 최대공약수가 1이 아님을 발견했습니다. 최대공약수 $k$를 찾은 후 각각을 $k$에 대해 나타내니 $22k,21k,7k,5k$였습니다. $-k$의 거듭제곱의 순환 주기가 매우 짧고, $g^a\equiv-k$이므로 shared secret인 $g^{abc}$는 $bc$ 값을 brute force함으로써 그 후보를 찾을 수 있었습니다. 10개 내외의 shared secret 후보를 찾았으므로 이를 전부 입력해보면 그 중 올바른 플래그를 찾을 수 있습니다.

Crypto - Capsulation

Crypto..라기보단 Stego에 해당하는 문제입니다. Score.png에서 음표를 적절히 숫자로 변경하여 1~26의 숫자로 바꾼 후 알파벳에 대응시키면 올바른 문자열이 나올 수도 있지만, 저는 그렇지 않았습니다. 1에 대응되는 위치를 잘못 설정한 것이라고 생각했고, 다른 위치를 1로 대응시켜 시도해볼 수도 있었지만 귀찮았으므로 그냥 Caesar Cipher Decrypter를 활용해 올바른 문자열을 찾았습니다. 이 문자열은 잠긴 zip 파일의 비밀번호였고, zip 파일을 열면 이미지 하나가 보입니다. 파일 크기가 이미지 픽셀 수에 비해 비교적 큰데, 숨겨진 파일이 있음을 의심할 수 있습니다. foremost를 사용해 이미지와 zip파일을 찾을 수 있습니다. 발견한 이미지를 zsteg를 통해 분석하면 zip 파일의 비밀번호를 얻을 수 있고, zip 파일에는 flag.txt가 있어 플래그를 발견할 수 있었습니다.

Endcard

개인적으로 Misc의 Image Challenge를 풀지 못한게 가장 아쉬운 것 같습니다. 올바른 접근을 했음에도 알파벳 G를 Q로 착각해 답을 찾지 못했고, 그렇더라도 네 자리 대문자 알파벳임을 추론하여 brute force할 수 있었을텐데 하지 않아 아쉽게 수상권에서 벗어났다고 생각합니다.

다음 대회부터는 일단 brute force 돌려놓고 고민해야겠네요.

yubin.choi's profile image

최유빈(yubin.choi)

2021-08-27 00:00

Read more posts by this author