개발&Development/보안

어플리케이션에서의 보안

겐도 2005. 5. 26. 12:37
우선 권장하는 책은 Writing Secure Code 2/E : 안전한 코드 작성 기술 정도가 있다. 이 분야에 대해 그나마 뭔가 주제를 가지고 쓴 책. 내용도 상당히 훌륭한 편.

언젠가 웹페이지나 프로그램에서 암호 부분에 '*'로 표시 된 것을 읽어 내는 프로그램이 유행한 적이 있다. 대부분의 개발자나 사용자는 화면에 보이지 않으면 암호가 안전할 것이라 생각하였는데 그런 부분에 대한 일침이었다. 하지만 아직도 많은 곳에서 이 방법을 사용중에 있다. 이것을 고치려는 노력은 별로 보이지 않는다. 정말 일부분의 프로그램만이 해당 위치에 가비지값을(혹은 암호화된 내용. 원래 패스워드를 구지 거기에 적을 필요는 없지 않은가) 넣어 둔다.

보안이라는 것은 자신의 자산을 지키는 것도 중요하지만 이제는 타인 특히 고객의 자산을 지켜주는 것도 중요한 것이다. 자사의 홈페이지에서 고객의 정보를 유출 시킬 수 있는 가능성이 존재한다는 것은 자사에 큰 피해는 없을 수 있겠지만 고객에는 엄청난 피해를 줄 수 있다. 예를 하나 들자면 웹페이지에서 고객들의 이메일 주소를 알 수 있게 하는 것은 각 고객들에게 스팸메일이라는 피해를 주는 것이다. 하지만 보라. 대부분의 사이트에서 그저 이메일 수집 금지라는 문구만 달아 놓았을 뿐 이메일 주소를 보호하기 위한 투자는 하지 않는다.


소프트웨어 사용권? 이런식의 문서의 내용을 제대로 읽어 본적이 있다면 다음 부분이 항상 있음을 알것이다. 본 소프트웨어를 사용함으로써 일어나는 모든 피해해 대해서 제조사는 책임이 없다. 즉 MS Windows에서 MS Word를 쓰다가 Word의 버그로 인해 10시간동안 작성한 레포트를 날려먹고 학점을 F를 맞아도 MS는 해당 문제에 대한 책임이 없다. 보안을 비롯하여 시스템이나 고객의 자산을 파괴시킬수도 있는 버그들에 대해 제조사들은 책임 회피를 하는 것이다. 사실 이 부분에 대해 책임을 지기 시작한다면 이 세상에 살아남을 소프트웨어 개발 회사는 없다. 반대로 문구 하나로 면책부를 얻은 개발자들은 너무 안일하게 생각하는 것이다.


자동 업데이트 기능은 요즘 간단한 텍스트 편집기 조차 가지고 있는 기능이다. 자 이것을 작성하는 임무가 당신에게 떨어졌다고 하자. 매우 간단하게 구현할 수 있는 방법중 하나가 Windows의 IE 객체를 이용, HTTP로 자사의 웹 서버에 접속해서 버젼을 확인하고 파일을 받아오면 되는 것이다. 이것이 다일까? 보안적인 이슈를 점검해 보자. 해커가 프로그램을 받아오는 웹서버에 대한 접근을 가로채서 악의적인 코드가 든 프로그램을 전송시켜 버릴 수 있다. 이 방법은 웹서버를 뚫어서일 수도 있고 로컬의 lmhost 파일을 수정할 수도 있는등 다양한 방법이 있다. 업데이트 프로그램을 받으려 할때 서버에 대해서 맞는 서버인지 확인하는 메커니즘을 고려해 본적이 있는가? 또한 업데이트 서버의 보안을 고려한 적이 있는가?

텍스트 에디터가 단순히 ASCII로만 이루어진 파일만 읽는 것이 아닌 바이너리 파일을 읽었을때 프로그램이 죽어버려 현재 가지고 있던 편집중인 파일의 내용을 잃어 버려서는 안된다 같은 숨겨진 요구사항이 있듯 특정한 파일을 읽으면 버퍼 오버가 일어나서 시스템을 깔끔하게 만들어 주는 일이 없도록 하는 보안적인 요구사항도 숨겨져 있는 것이다. 이런 것은 고객의 자산을 보호하려는 노력에서만 찾을 수 있을 것이다.


소프트웨어 회사는 소프트웨어를 팔아서 돈을 번다. 그 돈의 원천은 고객이다. 고객의 자산을 지키려는 생각을 해야 한다. 고객들의 자산이 유실되면 해당 소프트웨어 회사에 지불할 수 있는 돈이 줄어드는 것이다라고 생각했으면 좋겠다. 당신이 사장이라면 골프채 업그레이드도 중요하겠지만 개발팀에 보안적인 요소를 자문해 줄 수 있는 전문가도 필요하다라는 생각을 해 보기 바란다.

일반개발자가 이런 이슈들을 생각해 내는 것은.. 노력은 해야 겠지만 현실적으로 불가능 하다고 보는 것이 맞을 것 같다. 아키텍쳐 설계 단계부터 전문가의 조언이 필요할 것이고 반대로 보안적인 이슈를 생각해 낼 수 있는 사람들도 생산되어야 한다.