Untitled 0307

안녕하세요, 오랜만에 글을 쓰게 되네요. 이 저녁에 치킨 시킨 것을 반성하고자 뭐라도 생산적인 일을 해내야 한다는 압박감 속에 쓰는 것이라 금방 쓸 것 같습니다. 😀

어떤 주제의 글을 쓰지 생각 하다 예전에 찾았던 크롬 버그 설명과 평소에 제가 생각하는 운(Luck)에 관한 주제면 괜찮을 것 같아 보였습니다. 갑자기 이 주제가 떠오른 이유는 매우 간단합니다. 며칠전 용머가 한국 인터넷 진흥원에서 제공하는 보안 모듈에서 찾은 취약점의 PoC 영상을 추억이라며 보내왔습니다. 유튜브 영상이기에 자연스레 업로드 했던 영상이 뭐가 있는지 살펴보다가 48초의 PoC 영상을 찾게되었습니다. 해당 취약점은 운이 좋아서 발견할 수 있었다고 생각하기에 그 당시에도 하지 않았던 (간단한) 기술적 분석과 이런 방식에(얻어 걸리는 = 운에 의한) 대한 제 견해를 공유하고자 합니다.

해당 취약점을 찾게된 과정은 이렇습니다. 🚀

누군가 제게 URL을(자세한 기억은 없지만 모 커뮤니티의 게시글) 보냈습니다. 웹 개발을 하고 있던 터라 마침 개발자도구의 네트워크 탭이 켜져있었습니다. 게시글 페이지에서 불러오는 리소스들 중 특정 Custom Scheme으로 리다이렉션을 시도하는 요청이 빨간 글씨로 취소되었다는 것이 마침 눈에 들어왔습니다. 그때 당시 저는 단순히 “어? 왜지? 그러면 다른 Scheme들은 어떨까?” 하는 생각이 들었습니다. 곧바로 열줄 정도의 코드로 Special URL(data, file), 그 외 chrome, about:blank, javascript등 Scheme을 테스트 해 보았습니다.

몇 개의 Scheme들의 요청이 취소되는 것을 확인할 수 있었습니다. 요청이 취소되면 1) Address Bar의 URL이 원래의 URL로 복원되던가 2) 에러 페이지로 변경되는 것이 일반적인 현상입니다. 하지만 javascript shceme은 다른 것들과 달리 요청이 취소되고 원본 URL로 복구되지 않았습니다. 네, Address Bar Spoofing 취약점입니다.

소스코드를 보지 않고 단 10분만에 Security Issue를 발견했습니다. 90%의 운으로 말이죠. (왜 100%가 아닌지는 뒤에 나옵니다.) 패널들은 해당 취약점을 $1,000 값어치로 인정해주었습니다. 들인 시간에 비하면 매우 높은 금액입니다. 쓰다보니 서론이 너무 길어졌네요 간단하게 리뷰어들이 나눈 대화로 루트커즈를 서술하겠습니다.

문제가 된 라인입니다. 리다이트를 할 수 없는 URL이면 위 로직을 수행합니다. ResetNavigationRequest 를 하는 바람에 알 수 없는 ✌️Side-Effect✌️가 발생해 Address Bar를 복구하지 않는다는 것입니다. 패치는 에러 페이지를 발생시키는 것으로 되었습니다. 여담이지만 javascript 리다이렉션 동작을 데스크탑 앱으로 이동시킬 때 사용하고 있는 사용자가 엄청 많은 확장 플러그인이 있습니다. 해당 패치로 인해 에러 페이지가 발생해 UI (?)에 문제가 생겨 언젠간 에러 페이지가 발생하도록 수정하겠다는 기약 없는 TODO만 남긴채 ERR_ABORTED를 반환 하도록 수정되었습니다. 애플 사파리에서도 동일한 문제가 있어 애플 쪽에 리포트를 진행하였습니다.

위 취약점은 CVE-2019-5794을 부여 받았습니다. 사용된 PoC는 위 URL에 있으니 https://commondatastorage.googleapis.com/chromium-browser-asan/index.html 에서 2019년 01월 빌드를 받아 테스트 할 수 있습니다. (M71)

자, 이제 운에 관한 이야기를 해봅시다. 운에 의한 버그헌팅은 단기적으로 금전적 보상이 있어 좋아 보이지만 장기적으로 실력의 발전에는 별 도움이 되지 못합니다. 저는 어떤 행위나 의사 결정의 결과에 운의 비중이 얼마나 들어가 있느냐가 실력의 척도라고 생각합니다. 어떤 행위는 버그 바운티, 주식 투자, 아키텍처 설계등이 있습니다. 누가 결과에 대해 “어떻게 했어?” 라고 물었을 때 “그냥”, “누가 좋다던데?”, “이 값을 넣으니 저렇게 나오더라..” 등의 대답이 아닌 논리적 사고의 과정을 설명할 수 있어야 한다고 믿고 있습니다.

그러한 과정이 없다면 다음번에는 더욱 발전된 형태의 사고를 통해 더 나은 결과를 얻지 못하고 또 한번 운에 의지할 수 밖에 없을 것입니다.

가장 쉬운 예를 들어보겠습니다. 어떤 사람이 A회사의 (회사 이름이 마음에 들어서, 누구 추천으로, 꿈에 나왔다)주식을 샀는데 어느날 주가가 30%가 올랐습니다. 운이 매우 좋은 사람인가 봅니다. 이런식으로 매매를 계속하다 보면 어떻게 될까요? 매매를 할 때 논리적인 사고 없이 단순히 운에 의지 했기 때문에 잔고는 0원에 수렴할 것입니다.

위 취약점을 찾는 과정속에서 여러가지 Scheme을 테스트할 수 있던 것은 웹 개발을 하면서 쌓았던 지식이 우연히 논리적 사고에 영향을 주었을 것입니다. 그 외적인 요소는 (실제로 취약점으로 귀결 되었다던지, anchor 태그로 클릭하는 것이 아닌 Address Bar에 C&P 했다 던지) 모두 운에 의지한 사고였다고 생각합니다.

운의 비중을 낮추면서 취약점을 찾으려면 어떻게 할지 생각해 보았습니다. 제 결론은 간단합니다. 컴퓨터 보안은 컴퓨터 사이언스 지식의 응용에 불과합니다. 따라서 기반 지식이 수반되지 않으면 결국 많은 운을 필요로 할 것입니다. 저 또한 항상 자각하며 공부를 게을리 하지 않으려고 합니다.

30살에 은퇴하겠단 큰 꿈을 갖고 대학을 안(못)가고 산업계에 들어와 컴퓨터 사이언스 지식 부족에 의해 허우적 거렸던 저는 좋은 학교의 커리큘럼을 많이 참고했습니다. 물론 지금도 많은 도움을 받고 있습니다. https://csd.cs.cmu.edu/academic/undergraduate/bachelors-curriculum-admitted-2018 를 살펴보시면 됩니다.

어랏😲 치킨이 도착했네요, 하고싶은 말이 더 많지만 다음에 기회가 된다면 써보도록 하겠습니다. 네 그럼 치킨먹으러 도망갑니다, 모두들 화이팅이에요.

고추마요임 ㅋ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.