Security2015. 3. 18. 00:50
반응형

 최근 프로젝트 수행중에 프로젝트에대한 보안성 진단을 받았는데 취약점 리스트에 robots.txt가 존재하지 않아 개인정보가 검색 결과에 노출될 가능성이 있다는 진단결과를 받았습니다. robots.txt와 보안과의 상관관계에 대해서 알아보도록 하겠습니다.



robots.txt란?


  robots.txt는 로봇 배제 규약(robots exclusion protocol) 혹은 robots.txt 규약(robots.txt protocol)으로 알려진 규약으로서 웹 크롤러(Web Crawlers)에게 해당 웹사이트에 대한 크롤링 지침을 전달하기 위한 용도로 사용됩니다.



robots.txt가 존재하지 않을 경우


 robots.txt가 존재하지 않으면 보안적인 관점에서 어떤 문제가 있는지 생각해 보도록 합시다. 특정 웹 어플리케이션에 개인정보가 출력되는 'A'라는 페이지가 존재한다고 가정해 봅시다. 이 페이지를 배제 리스트 상에 지정하였을 경우 크롤링 대상에서 제외되므로 우려하는 검색결과에서 누출되는 것을 막을 수 있다고 생각할 수 있습니다. 하지만 크롤링 대상에서 제외된다는 것이 접근할 수 없다는 의미는 아닙니다. 위의 A페이지는 누구라도 직접 접근이 가능하며 규약을 지키지 않는 크롤러도 존재할 수 있습니다. 어떤 의미에서는 드러나지 않게 가져가는 크롤러의 경우가 좀 더 악의적일 수 있습니다. 즉 robots.txt가 존재하지 않는 것은 보안과는 관련이 없다는 사실을 알 수 있습니다. 이런 누출을 막기위한 방법은 해당 페이지에 접근 가능한 권한이 있는지 확인하는 절차를 거치는 접근 제어가 필요합니다.



robots.txt가 존재할 경우


 이제 또 다른 경우를 생각해 보도록 합시다. 개인 정보가 출력되는 'B'라는 페이지가 존재하며 해당 페이지는 관리자만 접근할 수 있다고 가정해 봅시다. 이 페이지는 관리자만 접근 가능한 영역에 존재하므로 공개된 영역에는 링크가 걸려있지 않습니다. 무차별 대입(Brute force)이외에 이 페이지의 존재여부를 알 수 없습니다. 하지만 이 페이지를 아래와 같이 크롤링 배제 리스트에 추가할 경우 악의를 가진 사람(혹은 단체)가 robots.txt를 열람하면 B페이지가 존재하는 것을 알 수 있습니다.


User-Agent: *
Disallow: /B


 물론 B페이지는 관리자 권한을 통한 접근 제어를 하고 있으므로 당장 접근해서 기밀 정보를 획득할 수 없습니다. 하지만 B라는 페이지가 존재한 다는 것을 아는 것만으로도 악의를 가진자는 해당 페이지를 매일 모니터링해 볼 수 있습니다. 어느날 해당 어플리케이션 수정 미스로 접근 제어가 풀려 버린다면 기밀 정보가 누출 될 수 있습니다. 또한 B이외에도 비슷한 여러 페이지가 등록되어 있다면 해당 어플리케이션의 디렉토리 구조를 파악해서 취약점을 유추해 낼 수 있을지도 모릅니다.(악의를 가진자가 특정 어플리케이션을 목표로 삼았다면 가장 먼저 하는 것이 정보수집이며 디렉토리 구조등도 당연히 정보에 포함됩니다)


※관리자 영역의 경우 네트워크와 같은 물리적인 영역에서 접근이 불가능하도록 제어하는 것이 좋으나 가능하지 않을 경우에는 해당 페이지에 권한 없이 접근시 404 코드(해당 페이지가 존재하지 않음을 나타내는 http status)를 반환하는 것도 고려해 볼 만 합니다. 실제로 apache tomcat 서버의 경우는 WEB-INF이하에 접근했을 경우 404 코드를 반환합니다.



 관리자 페이지가 아닌 누구나 회원가입해서 열람 가능한 페이지라면 악의를 가진자도 열람 가능하므로 디렉토리 구조를 파악할 수 있습니다. 이 경우에는 접근 제어 및 검증을 좀더 꼼꼼하게 진행해야 합니다.(관리자 페이지는 대충해도 된다는 의미는 아닙니다.)



 위에서 작성한 것처럼 robots.txt 자체는 보안과 별로 관련이 없다는 것을 알 수 있습니다. 다만 접근 제어를 실수했을 경우를 대비해서 검색결과에 누출되는 등과 같은 광범위한 누출을 방지하기 위해서 작성해 놓아도 무방할 듯 합니다. 하지만 그 내용은 공개되지 않는 영역의 구조를 파악할 수 없도록 잘 확인해야 합니다. 혹은 META 태그를 이용하여 해당 페이지에 직접 기술하는 방법도 유용할 듯 합니다.


※검색 결과에서 특정 웹 어플리케이션의 취약점을 알아내어 개인정보를 탈튀하거나 혹은 검색결과에서 직접 개인정보를 알아내는 일은 'Google Hacking'이라는 용어가 붙어있을 정도로 알려져있는 보안 취약점입니다



 크롤러가 robots.txt의 지침을 따라줄지는 크롤러를 만든 사람 혹은 회사 이외에는 누구도 알 수 없습니다. robots.txt 프로토콜은 단순히 지침을 따라서 검색해 주십시오 정도로 부탁하는 그 이상도 그 이하도 아닙니다. 이런 환경에서 기밀 정보의 보호는 크롤러가 약속에 따라줄거라는 선의에 기댈 것이 아니라. 적절한 인증을 통해 기밀 정보에 접근이 가능하도록 시스템을 구축하고 해당 접근 제어가 제대로 동작하고 있는지 검증하는 시스템으로 이루어져야 합니다. 여러분의 웹 어플리케이션도 다시한번 확인해 보는게 어떨까요?





참조

     - http://www.robotstxt.org/


      Posted by Reiphiel