공격이 복잡해도 방어는 간단하게.
예전에 같은 팀의 어떤 비 개발자 분이, 해킹툴을 어떻게 막는지 궁금하다고 하시면서 옆에서 작업 상황을 구경하러 오신 적이 있습니다. 그래서 "뭐 괜찮으니까 옆에서 보세요" 하면서 옆에 앉혀놓고 작업을 시작했는데요, 처리하는걸 다 보고 나서 하시는 말씀이...
"뭔가 너무 빨리 끝나는 것 같은데요, 혹시 지금 제가 본다고 해서 대충 하시는거 아닙니까..."
라는 질문을 하더군요. 근데 사실 저는 뭐 그때 처리한 것이 간단히 블럭시킬 수 있는 해킹이기도 했고, 또 저도 성향이 원래 코드를 길게 만드는 편이 아니라서 그런지, 작업 시간과 내용이 길지 않았던 것 같은데 그것 갖고 아마 그렇게 생각하시는 게 아닐까 생각이 들었습니다.
그런데 어쨌든, 그걸 증명할만한 딱히 적당한 발언이 생각나지 않아서 그 당시에는 그냥 지나쳐 왔습니다만 많은 시간이 지나도 뭔가 똥을 눠도 시원하지 않는 듯한 찝찝함이 남아 있었습니다. 그러다가 최근 들은 얘기 중 명언이 있습니다.
"공격이 복잡해도 방어는 간단하게"
아 ! 듣는 순간 "바로 이거다" 하는 생각이 들었습니다. 가장 정답이 아닐까 합니다. 힘들게 해커가 뚫었다고 해서 우리도 그걸 힘들고 복잡한 방법으로 막을 필요는 없습니다. 간단하고 깔끔하고 구조의 큰 변경 없이 근원적인 보안이 가능하다면 그것이야말로 가장 해피하고 나이스한 처리 방법입니다. 서버를 죽이는 공격 같은것이 좋은 예가 될 수 있겠네요. 생각해 보세요, 서버를 죽이기까지 해커는 오버플로우가 발생하는 개구멍을 찾으려고 구간마다 AAA를 겁나게 입력해볼거고 엄청난 개고생을 거쳐야지만 서버를 죽일 수 있겠지만, 방어하는 측 입장에서 서버가 죽는 원인은 결국 길이 검증쪽이거나 널 포인터 문제가 대부분이고 그것을 검사하면 그만입니다.
물론 이렇게 단순한 문제가 주를 차지하지는 않겠지만, 어플 쪽 해킹이나 ring0 쪽의 복잡다단한 공격도 의외로 매우 쉽고 간단하게 방어할 수 있습니다. 그럴때는 고민하지 않고 그 방법을 사용하면 됩니다. 그리고 그런 보안 방법은 생각보다 정말 대단히 효과가 좋을 수 있습니다.
"공격이 복잡해도 방어는 간단하게" 정말 명언이 아닐까 합니다. 이 말을 들은 후에 생각났던 옛날 이야기들을 한번 끄적거려 보았습니다. 다시 그 분을 만나서 말해주고 싶네요. 지금은 연락이 되지 않아서 어디서 무얼 하고 계실지는 모르겠지만 :)
window31.