Business Thinking/Technology

웹 서비스 기획자를 위한 웹 보안 가이드

지하련 2012. 8. 1. 13:40



새로운 서비스를 준비 중이라면, 그것이 오프라인 서비스라고 하더라도, 온라인 플랫폼 - 웹 사이트, 모바일 어플리케이션 등 - 을 고민하지 않을 수 없다. 온라인 플랫폼은 웹Web이 기반이 되어야 하고, 웹에서 파생된 API나 모바일 어플리케이션으로 확장될 것이다. 


이러한 온라인 플랫폼은 서비스 모델(수익모델)과 전략을 수립하고, 웹 서비스 기획자가 상세하고 정교한 스토리보드를 만들고 디자이너가 UI/UX를 고민하며, 실제 이미지 작업을 하고, 이를 바탕으로 개발자가 고객의 서비스 환경에 최적화된 프로그래밍 작업을 한다. 시스템 담당자들은 하드웨어와 네트워크를 설계, 관리하게 될 것이고.


하지만 웹 기반의 온라인 서비스 오픈 이후 문제가 발생했을 때, 그것을 해결할 수 있는 것은 기획자나 디자이너가 아니라 개발자이다. 개발자 - 종속적인 상황이 펼쳐진다. 제대로로 웹 프로그래밍이 되어 있고, 설계나 프로세스가 깔끔하게 되어 있다면 문제가 안 되겠지만, 그렇지 않다면 문제가 될 수 밖에 없다. 특히 보안 문제는!! 


어제 우연찮게 '시큐어 코딩'에 대한 강의를 들을 수 있었다. 그 동안 많은 서비스를 준비하고 디자이너, 개발자들과 이야기하면서, 내 스스로 뭔가 부족하다는 느끼고 있었는데, 그 부분을 짚을 수 있었다. 



1. 웹 상에서 입력되는 정보는 믿을 수 없다. 


고객이 입력하는 정보는 무조건 믿을 수 없다. 그러니, 해당 정보에 대해 진위 여부를 검증하는 절차를 마련해 놓아야 한다. 그것이 웹 페이지 상의 입력창이든, 웹 브라우저의 url 입력창이든 상관없다. 


가끔 게시판 리스트 페이지 주소에서 노출되는 url 정보의 일부를 수정하여 입력하였을 경우, 터무니 없는 페이지가 노출되기도 한다. 이런 것들을 막을 수 있도록 웹 프로그래밍 작업을 해야 하고, 웹 서비스 기획자는 사이트 오픈 전 다양한 형태의 보안 검증 작업을 수행해보아야 한다. 검색어 입력 창에 특정 스크립트를 넣어본다든지, url 정보의 일부를 수정하여 동작시켜본다든지 해서. 



2. 유추할 수 있는 이름으로 소스파일을 만들지 말자. 



전 세계의 무수한 사이트들 속에 main.jsp, main.php, main.asp는 얼마나 많을까? 가령 member.jsp 라든지 ... 해당 파일 이름으로 해당 파일의 성격을 알 수 있도록 하면 매우 위험하다. 개발의 편의성으로 인해 개발자들은 자주 이러한 이름으로 파일을 만든다. 따라서  서비스 기획 단계에서 파일 이름에 대한 정의나 가이드 라인을 제정하는 것이 좋겠다. 


3. 에러 메시지도 전략적으로 노출해야 한다. 


아이디를 잘못 입력하면, '아이디를 잘못 입력하였습니다'라고 에러 메시지가 뜨고, 비밀번호를 잘못 입력하면, '비밀번호를 잘못 입력하였습니다'라고 에러 메시지가 뜨면, 고객 입장에서는 무척 친절하다고 여길 수 있지만, 해커 입장에서는 두 가지 정보 중 하나는 맞구나하고 좋아한다. 


그래서 에러 메시지도 '아이디나 비밀번호를 잘못 입력하였습니다'라고 노출해야 한다. 


에러 페이지도 마찬가지다. 특정 사이트들 경우, 에러 페이지에 대한 별도의 페이지를 제공하지 않고, 서버에서 제공하는 페이지를 제시한다. 그런데 이 페이지에는 시스템 환경에 대한 정보를 제공하여, 해당 서버나 웹 서비스의 취약점을 스스로 보여주는 경우가 있으니, 에러 처리에 대한 전략도 수립되어야 한다. 


웹 서비스 오픈 전에 기획자는 에러 메시지들을 체크하여 보안 점검을 해야 할 것이다. 



4. 구글 해킹을 막자 


해킹은 매우 간단하게 이루어진다. 아래는 구글 검색으로 사이트의 정보를 얻을 수 있는 대표적인 검색어들이다. 


출처: http://devdev.tistory.com/69 


위의 검색어를 통해 특정 사이트의 admin이나 특정 단어 등을 찾아낼 수 있다. 따라서 관리자 페이지는 검색을 통해 접근할 수 없도록 막아야 한다. 하지만 그렇지 않는 경우가 너무 많다. 


어떤 사이트들은 아예 메뉴에 '관리자'를 노출해놓기도 한다. 구글 해킹은 구글 검색 만으로도 특정 사이트들의 취약점을 파악할 수 있고, 간단하게 관리자 페이지로 접속하여 해당 사이트에 저장된 많은 정보들을 가지고 올 수 있다는 것이다.  



5. 웹 브라우저의 개발자 도구를 조심하자



익스플로러 메뉴에서 도구 >> 개발자 도구 라는 메뉴가 있다. 문제는 개발자 도구에서 특정 부분을 수정하면, 어떤 페이지들은 그 수정된 값이 정상적인 값으로 인식하여 동작한다는 것이다. 이러한 접근은 비정상적인 접근이므로, 에러 처리를 해야 한다. 익스플로러 뿐만 아니라 다른 오픈 소스 기반의 웹브라우저들에도 이런 개발자 도구가 있으므로, 기획자는 개발자 도구를 통해 웹 서비스 오픈 전에 다양한 점검을 수행해 볼 필요가 있다. 



6. 필요없게 된 페이지들은 즉시즉시 삭제하자. 


웹서비스를 하다 보면, 다양한 온라인 프로모션 활동을 하게 되고, 별도의 페이지를 만들게 된다. 그런데 해킹 기술은 나날이 발전하고, 옛날에 개발해놓은 페이지들은 아무리 잘 되어 있다고 하더라도 취약점이 생기기 마련이다. 따라서 일정 시간이 지나면 해당 페이지들은 서버에서 삭제처리를 해야 한다. 



7. 주석문을 체크하자. 


개발 완료된 웹 페이지의 소스를 보면서 주석문을 체크해야 한다. 대부분의 고객은 소스를 보지 않기 때문에, 종종 개발자들은 주석문에 고급 정보를 기입해놓기도 한다. 심지어 아이디와 비밀번호를 적는 황당한 경우도 있다고 한다. 따라서 서비스 오픈 전에 기획자는 소스의 주석문 처리가 어떻게 되어있는지 확인해볼 필요가 있다. 



 

어제 들었던 강의를 내 나름대로 7가지 정도로 요약해보았다. 


보안은 아무리 강조해도 지나치지 않다. 하지만 보안을 개발자의 책임으로 미룰 수 없는 일. 기획자들도 보안에 대한 인식을 가지고 웹 서비스 개발 중에 보안 점검을 하여, 미래에 생길 지도 모르는 사고를 막는 법을 알고 있어야 한다. 위의 7가지로 막을 순 없겠지만, 그래도 조금의 안전 장치를 마련할 수 있지 않을까 싶다.