2. 웹 보안 게이트웨이의 기능
상태바
2. 웹 보안 게이트웨이의 기능
  • 승인 2005.05.25 00:00
  • 댓글 0
이 기사를 공유합니다

Tech Guide-웹 보안에 대한 위협과 대처방안
웹 보안 강화가 근본적인 해킹 예방책이다

SQL 인젝션·크로스사이트스크립팅 등 공격 다양 … 웹 전문 보안 솔루션 속속

연·재·순·서
1. 웹 애플리케이션 보안의 현 주소
2. 웹 보안 게이트웨이의 기능(이번호)
3. 향후 웹 애플리케이션 보안 시장 전망

여성구
안철수연구소 컨설팅서비스사업부 컨설턴트
barami@ahnlab.com

지난 호에 웹 보안의 중요성과 그 대처 방안에 대한 개괄적인 내용을 살펴봤다. 이번 호에서는 웹의 위험성에 대해 ‘해킹’이란 보다 실질적인 보안 위험을 가지고 좀더 구체적으로 살펴보도록 하자. <편집자>

해킹이란 사전적 의미로, 정보 시스템의 취약성을 이용하거나 기존의 공격기법을 활용해 정보시스템에 해를 끼치는 새로운 기능을 만들어 내는 행위, 또는 접근을 허가 받지 않은 시스템에 불법으로 침투하거나 허가되지 않은 권한을 불법으로 갖는 행위로 정의돼 있다.(출처: 네이버 용어사전) 사전적 의미로는 해킹이란 것을 정보 시스템에 국한하고 있으며, 결론적인 것만을 이야기하고 있으나, 인류는 일상 생활을 하면서 꾸준히 이 ‘해킹’이란 작업을 수행해왔다. ‘해킹’이란 것을 다시 간단하게 정의 내리자면, ‘올바른 법칙을 찾는 행위’라고 할 수 있다.
흔히 어떤 꽁수나 트릭 정도로 비춰지거나 마법처럼 생각되는 것이 현실이다. 필자가 웹의 위험성을 얘기 하면서 뜬금없이 이러한 얘기를 하는 이유는 해킹이 ‘뚝딱!’하고 갑자기 발생하는 것도 아니고 관련 법률이 엄청나게 생겨서 이를 억제한다고 사라지는 것이 아니라는 것을 강조하고 싶은 이유에서이다. ‘해킹’의 근원은 어떤 규칙을 구현할 때 생기는 빈틈을 이용하는 것이며, 이를 이용하는 방법은 우리가 기존에 알고 있는 ‘올바른 법칙’을 따르는 것이다.
인간의 생각 행동에는 허점이 생길 수 있으며, 왜곡도 될 수도 있다. 또한 이전에 알지 못하는 영역이 새롭게 발견되면서 기존의 방식이 잘못된 방식이 되어버리는 일이 자주 있다. 따라서 해킹의 근원이 되는 이 빈틈들은 지속적으로 출몰하게 되는 것이다. 결론을 얘기하자면, 보안 기술이 발달하는 만큼 해킹 기술 역시 꾸준히 발전을 할 것이며, 인류가 종말하기 전까지 사라지지 않을 것이다.

해킹의 발전
전통적으로 해킹이라고 하면 어셈블리어와 C 언어와 같이 복잡한 언어를 이용해 악성 코드를 작성하고 이를 실행함으로써 원격에 존재하는 시스템의 접속 권한을 획득하거나 로컬 시스템 사용자 또는 관리자 권한을 획득하는 것으로 생각을 해왔다. 좀더 구체적으로 얘기를 하자면 공격자는 네트워크 스캐너를 이용, 목표 시스템을 스캐닝한 후 개방돼 있는 포트를 통해 취약한 상태로 운영되고 있는 서비스를 공격함으로써 시스템을 사용할 수 있는 권한을 간단하게 획득할 수 있었다. 하지만 이러한 공격은 방화벽이란 보안 솔루션의 등장과 함께 기업들의 적극적인 도입을 통해 차단하게 되었다. 따라서 공격자는 새로운 길을 찾게 됐고 그 길이 바로 웹 서비스의 취약점이었다.
웹 서비스가 공격자의 수단이 된 이유는 의외로 간단하다. 첫 번째로 공격자가 침해하고자 하는 거의 모든 대상이 웹 서비스를 운영했다. 두 번째로는 웹 서비스를 제공하는 웹 서버와 웹 애플리케이션 서버의 취약점이 발생했다. 세 번째로는 웹 서비스를 제공하기 위해서 제작된 애플리케이션이 짧은 역사와 급격한 발전으로 인해서 보안을 고려하기 보다는 속도, 기능, 디자인만을 고려해 제작돼 매우 취약했다는 점이다. 이러한 이유를 시발점으로 웹 해킹이라고 불리는 해킹 영역을 공격자와 시스템 관리자들은 경험하고 있으며 현재는 집중화되고 있다.
현재의 웹 해킹은 다음과 같이 정의될 수 있다. 웹 해킹이란 웹 서비스와 관련된 웹 서버, 웹 애플리케이션 서버, 데이터베이스 시스템 그리고 CGI, ASP, JSP 등과 같은 웹 애플리케이션을 대상으로 불법적인 권한과 정보를 획득하는 것이다. 특히 불법적인 권한과 정보라는 것이 기존의 해킹과 달리 사이버 머니나 회원 정보와 같은 개인 정보 그리고 웹 애플리케이션의 사용자/관리자 권한 획득 등과 같이 기존의 해킹과는 달리 보다 현실적이며, 금전적인 목적성을 가지고 있는 것이 대부분이다. 또한 이러한 추세는 웹이란 매체에 인터넷 뱅킹을 비롯한 다양한 금전 관련 정보들이 웹에 집중됨에 따라서 가속화되고 있다.

웹의 주요 취약점
웹 보안의 중요성이 화두가 되면서 나타난 단체가 ‘OWA SP(Open Web Application Security Project)’다. 이 단체는 웹 애플리케이션 보안에 비전을 가지고 있는 기업과 개인들의 자발적인 참여로 구성된 개방된 프로젝트로 누구나가 참여할 수 있다. 이 프로젝트에서는 그 목적성에 맞게 웹 보안과 관련된 정보(가이드라인 및 다양한 문서)와 보안을 강화하거나 점검할 수 있는 도구를 제공하고 있다.
OWASP에서 웹 서비스의 취약점 중에서 핵심적인 10가지를 선별해 발표한 것이 ‘OWASP Top 10’이란 문서이다. 이는 웹 애플리케이션에서 자주 발생하는 취약점들의 목록으로 즉각적인 조치가 필요한 것들이라고 할 수 있다. 전통적인 취약점들과 마찬가지로 사용자로부터의 입력은 항상 예측할 수 없기 때문에 아래의 취약점들 역시 대부분이 입력 값 조작에 의한 것이라는 것을 알 수 있다.
<표 1>에 소개된 주요 취약점들로 인해 다양한 공격 기법들이 파생되고 있으며, 최근에는 웹 애플리케이션의 취약점들을 묶고 자동화해 웜의 형태로 발전하고 있다. 특히 A1의 ‘입력 값 검증 부재’의 경우 전체 웹 애플리케이션의 취약점을 대표하는 것으로 10가지로 나열된 취약점 중에 ‘크로스사이트 스크립팅’, ‘버퍼 오버플로우’, ‘삽입 취약점’ 등은 그 중요도로 인해 강조된 것이다.

주요 웹 해킹 기법
웹 해킹 기법들은 매우 다양하며, 계속 쏟아져 나오고 있다. 이러한 기법들을 구분해보자면 웹 서버, 웹 애플리케이션 그리고 데이터베이스 시스템과 같은 웹 컴포넌트를 공격하는 기법과 그 위에 웹 프로그래머가 자체적으로 제작한 웹 애플리케이션을 공격하는 기법이 있다. 초기에는 웹 컴포넌트의 취약점을 중심으로 한 공격 기법들이 쏟아져 나왔으나 현재는 사용자가 많은 공개 게시판을 비롯해 웹 애플리케이션 자체의 취약점을 이용하는 공격 기법들이 그 주류를 이루고 있다.

웹 컴포넌트
웹 컴포넌트를 대상으로 하는 해킹 기법 중의 하나는 컴포넌트 자체가 가지고 있는 취약점을 공격하는 것이다.
완전한 프로그램이란 있을 수 없다. 이러한 확언에 동의를 못하시는 분들이 있으실지 모르니 구체적인 예를 들어 보도록 하겠다. 웹 서버 환경에서 독보적인 위치를 가지고 있는 아파치(Apache)의 경우 <그림 4>를 보면, 2003년부터 꾸준히 취약점이 발표되고 있음을 알 수 있다. 비단 이러한 취약점들의 발표는 아파치에만 국한된 것은 아니다.
웹 컴포넌트에서 발생하는 취약점의 경우 한번 발생하게 되면 그 파급효과가 웹 애플리케이션에서 발생하는 것보다 크다. 취약점이 발표된 버전을 사용하고 있다는 것만으로 위험성에 빠지게 된다. 일례로 2001년 마이크로소프트사 IIS 4.0과 5.0의 취약점으로 인해서 발생한 코드레드 웜으로 인해 전세계적으로 큰 피해가 발생했으며, 2003년 마이크로소프트사MS-SQL 서버의 취약점을 이용한 ‘슬래머 웜’의 등장 역시 막대한 피해를 초래했다. 이렇게 컴포넌트의 취약점들이 자동화되고 있는 추세는 앞으로 가속화되고 있다.
웹 컴포넌트는 초기 출시할 때 누구나가 곧바로 사용할 수 있도록 사용자의 편의를 최대한 반영해서 기본 값을 설정하게 된다. 또한 벤더가 보안을 고려해서 기본 설정 값을 제공한다고 해도 사용자는 사용의 불편을 이유로 이들을 모두 해제해버리는 경우가 대부분이다. 이렇게 보안이 허술한 설정으로 인해 여러 가지 핵심적인 정보가 공격자에게 노출이 되고 실제적으로 공격에 이용되게 된다.
예를 들면 ‘디렉토리 인덱싱(Directory Indexing)’은 웹 서버에서 기본 페이지로 지정해 놓은 파일이 존재하지 않을 경우 사용자가 요청한 디렉토리에 존재하는 파일과 하위 디렉토리를 출력해주는 기능이다. 하지만 관리자 페이지가 존재하는 디렉토리 또는 불필요한 남용으로 인해 공격자는 간단히 웹 브라우저에서 해당 디렉토리를 요청하는 것으로 중요한 디렉토리에 존재하는 파일의 종류와 백업 파일의 존재 등을 인지할 수 있으며, 중요한 백업 파일을 다운로드 받아 갈 수도 있다. <그림 6>은 관리자 디렉터리에 대해서 디렉토리 인덱싱을 허용하고 있어 공격자가 구조 및 백업 파일 등의 정보를 획득할 수 있는 것을 보여준다.
이런 설정 오류의 예는 다양하게 존재한다. 웹 컴포넌트에서 발생하는 실행 오류를 사용자에게 그대로 전달함으로써 공격자가 서버 측의 중요한 정보를 획득할 수 있도록 설정한다든지(벤더에서 출시할 때 대부분 오류 메시지가 사용자에게 전달되도록 되어 있다) 서버 측에서 실행될 수 있는 확장자를 너무 과도하게 등록하는 행위 등이 여기에 해당된다고 할 수 있다. 서버 측에서 실행 가능한 확장자를 과도하게 등록하는 경우 공격자는 다양한 시도를 통해서 악성 코드를 서버 측에 올릴 수 있고 이를 서버 측에서 실행되도록 할 수 있다.

웹 애플리케이션
이제 가장 많은 문제가 되고 있는 웹 애플리케이션에 대해서 살펴보기로 하자. 웹 애플리케이션은 다수의 벤더에서 패키지 형태로 판매도 하고는 있지만 실제 기업에서는 자신만의 기업 환경과 필요에 의해서 새롭게 개발해 사용하고 있는 것이 추세이다.
그런데 중요한 것은 이러한 웹 애플리케이션은 개발될 때 보안에 대한 고려하기보다는 기능이나 디자인(UI) 쪽으로 치우치는 것이 현실이라는 것이다. 따라서 사용자가 입력하는 값에 대해서는 어떠한 검증을 굳이 실시하지 않고 있다. 앞서 주요 취약점을 살펴보았지만 웹 애플리케이션을 오작동하게 만들 수 있는 것은 바로 ‘사용자’다.
주요한 공격 기법에는 SQL 인젝션, 크로스 사이트 스크립팅(Cross-Site Scripting), 커맨드 인젝션, 쿠키 조작, 히든 필드(Hidden Field) 조작 등 다양한 이름을 가진 공격 기법이 존재하고 있다. 이들 모두 사용자가 입력한 값을 확인 또는 검증하지 않아서 발생하는 것으로써 공격 기법과 그 목적에 따라서 다양한 결과를 공격자에게 반환하게 된다. 현재 이러한 공격 기법은 서버 측을 공격해 서버에서의 권한이나 정보의 획득을 주 목적으로 하는 것에서 웹 애플리케이션을 이용해서 사용자를 공격하는 것으로 변화하고 있다.
예를 들어 SQL 인젝션은 데이터베이스에서 문제가 발생되게 하는 것으로써 서버 측에 직접적인 공격을 시도하는 것이다. 그 원리는 공격자가 SQL 명령어 상에서 특수한 의미를 가지고 있는 문자의 조합들을 입력하고 웹 애플리케이션에서 사용자가 입력한 값을 검증하지 않고 바로 SQL 구문에 삽입해 데이터베이스 시스템에 전달되게 된다. 이때 전달되는 SQL 구문은 초기에 웹 애플리케이션 프로그래머가 의도한 의미를 가지는 것이 아니라 공격자에 의해서 변질된 의미를 가지게 되고 엉뚱한 값들이 반환되게 되는 것이다. 결론적으로 이렇게 반환된 엉뚱한 값은 애플리케이션까지 영향을 미치고 여러 가지 오작동을 초래하는 것이다.
공격자가 SQL 인젝션을 로그인 창에 단순 ‘인증 우회’를 위해서 시도할 경우 아주 간단한 문자열 조합을 통해서 이를 우회할 수 있으며, 데이터베이스의 획득이 목적이라고 한다면 조금 더 복잡한 조합은 통해서 사용자의 아이디와 비밀번호를 비롯해 개인 신상 정보를 모두 알아 낼 수 있다. 또한 데이터베이스 시스템에서 시스템 명령어를 실행할 수 있도록 설정해 놓았을 경우엔 공격자는 SQL 인젝션을 통해서 데이터베이스 시스템의 시스템 명령어까지도 실행시킬 수 있다.
다음으로 사용자를 공격하는 대표적인 공격 기법으로 크로스 사이트 스크립팅이 있다. 이것 역시 입력 값 검증을 실시하지 않는 웹 애플리케이션의 취약점을 이용하는 것이다. 이는 자바스크립트나 VB스크립트와 같이 웹 브라우저를 통해서 사용자 측에서 실행 가능한 스크립트 언어를 사용해 사용자 측에 존재하는 인증 토큰의 획득을 비롯해 악성 프로그램의 실행 등을 비롯해서 다양한 공격을 시도할 수 있게 해준다.
일반적으로 크로스 사이트 스크립팅의 위험성에 대해서 간과하고 있어서 안타깝다. 하지만 그 효과로 공격자는 한 순간에 모든 것을 얻을 수 있다는 것을 잊지 말았으면 한다. 이는 사용자가 많은 사이트의 경우 더욱더 높을 수 있다. <그림 8>에서 보듯이 공격자는 간단한 스크립트를 실행함으로써 다수의 정보 및 권한을 획득할 수 있다.
이 외에도 필드 업로드(File Upload) 취약점을 이용해서 서버의 시스템 쉘 권한을 획득하는 공격 기법과 상대 경로(../)를 이용해서 서버 측에 존재하는 파일을 다운로드 받거나 오작동하도록 하는 등 보다 다양하고 화려한 공격 기법들이 존재하고 있다. 하지만 가장 핵심적인 것은 이 모든 것들이 보안이 고려되지 않은 상태에서 제작된 웹 애플리케이션에 의해서 발생하는 것이란 점을 재차 강조하고 싶다.
또 한가지 중요한 점은 보안 기술이 발달할수록 이를 우회하거나 무력화시키는 기술 역시 발달한다는 것이다. 기존의 웹 보안 솔루션에서 공격 패턴을 등록시켜 놓고 이를 차단 또는 탐지하는 형태를 제공하고 있다. 일부 관리자들은 이 기능만으로 웹 해킹을 막을 수 있다고 생각하고 있는 것 같다. 공격자는 URL 인코딩이나 유니코드와 같은 ‘문자열 인코딩’ 기법을 통해서 이러한 탐지 또는 차단을 쉽게 우회할 수 있다는 것을 알아야 한다. 상대경로는 <그림 9>와 같이 다양하게 변화돼 요청될 수 있다.

웹의 잠재적 위험
웹은 현재 우리의 생활에 중심이 됐으나 이를 사용하고 있는 다수의 사용자를 충분히 보호할 수 있을 만큼 안전하지 않다. 공격자는 웹 애플리케이션을 통해 기업의 내부 시스템에 접근할 수 있으며, 취약점이 존재한다면 내부로 침투할 수 있다.
공격자에 의해서 침투를 당했다면 같은 네트워크 대역에 존재하는 모든 시스템에서의 정보 유출을 의심해봐야 하며, 더 이상 신뢰할 수 없게 되는 것이다. 또한 기업의 가장 핵심적인 데이터베이스는 웹 애플리케이션과 신뢰관계를 맺고 있기 때문에 이 모든 정보가 공격자에게 노출된다. 다음으로 공격자는 장악한 시스템을 이용해서 내부 시스템 사용자가 존재하는 곳에 침투할 수 있으며 악성 프로그램을 실행시킬 수도 있다.
또한 침해를 당했을 경우 이를 적절히 대응할 수가 없다. 이는 일반적인 해킹도 유사하지만, 침해를 당한 시기와 침해를 인지하는 시기는 시간차가 존재한다. 현실적인 환경에서 대부분의 시스템 관리자는 시스템의 속도가 저하되거나 메인 페이지가 공격자에 의해서 변조됐다던지 시스템을 업그레이드 또는 재 구동하는 과정에서 이를 인지하게 된다.
이 때에는 침해 분석을 할 수 있는 로그 파일이나 공격자의 흔적들이 삭제되거나 변조된 이후이기 때문에 공격자가 어디까지 침해를 했는지를 알 수가 없게 되고 이러한 자료의 신뢰성은 떨어지게 된다. 또한 웹의 특성상 엄청난 로그의 양으로 인해 공격의 흔적을 찾기란 결코 쉽지 않다.
웹을 통한 공격은 최근에 발생한 phpbb와 제로보드(zeroboard) 취약점을 이용해 산티웜(SANTY.WORM)을 제작한 것과 유사하게 점점 더 자동화 되고 그만큼 파급효과와 전파 속도가 빨라질 것이다. 또한 대형 벤더가 양산하고 있는 웹 컴포넌트와 달리 독립된 자체적인 웹 애플리케이션 솔루션을 갖추는 것이 일반적이기 때문에 취약점이 발생한다고 해도 이를 제대로 대응할 수 없다는 것 역시 큰 문제점이 아닐 수 없다.
정보 기술의 발달로 인해서 웹을 통해서 정보는 널리 퍼져 나가며, 웹과 연결돼 있는 다수의 시스템은 알 수 없는 수많은 위험에 노출돼 있다. 인터넷과 연결돼 있는 시스템은 마치 아프리카 초원에 홀로 방치돼 있는 사냥감과 같으며, 인터넷 저편에는 정직한 사용자만 존재하는 것이 아니라 그늘에 숨어서 사냥감을 지켜보고 있는 야수와 같은 공격자가 다수 존재하고 있다. 게다가 해킹에 이용될 수 있는 정보가 너무나 일반화돼 있는 사실 또한 웹의 잠재적 위험요소다.
무엇보다 웹과 관련된 다수의 신 기술들이 그 보안성을 충분히 검증 받기 전에 단순히 최신 기술이란 이유만으로 경쟁적으로 도입/적용하고 있는 것이 현실인 것을 감안할 때 지금까지 언급된 모든 요소들은 웹의 취약점을 만들고 잠재적인 위험들을 키우고 있다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.