1. 웹 애플리케이션의 보안 문제점

|

책 : [웹 해킹 & 보안 완벽 가이드]를 읽으면서

공부한 내용을 정리하는 곳입니다.


[1] 웹 애플리케이션의 발전

인터넷의 초창기에 월드와이드웹(WWW)은 단지 웹 사이트였다.

정적인 문서만을 담고 있는 정보 저장소였으며, 주요 정보는 서버에서 브라우저로 한쪽 방향으로 흐르는 형태였다.

웹 사이트를 호스팅하는 데 따르는 보안 위협은 주로 웹 서버 소프트웨어와 연관된 취약점에서 오는 것이었다. (당시에는, 그 사이트 파일을 변조하거나, 불법 파일 공유 사이트로 활용하는 것이 전형적인 공격 형태)

오늘날 웹사이트는 사실상 애플리케이션으로 서버와 브라우저 간의 쌍방 간 정보 흐름에 기반을 둔 매우 실용적인 애플리케이션이다.

사용자에게 제공되는 내용은 즉석에서 동적으로 생성되며, 각 사용자에게 맞춰 작성된다. 이런 정보들은 매우 중요하고 개인적이다.

웹 애플리케이션은 이로운 면도 있지만 새롭고 중요한 보안 위협도 함께 갖고 있다.


일반적인 웹 애플리케이션 기능

일반적은 웹 애플리케이션 기능은 쇼핑, 사교, 뱅킹, 웹 검색, 경매, 도박, 웹로그, 대화형 정보등이 있으며,

  • HR(인사 관련) 애플리케이션
  • 메일서버, 가상머신 관리 등 주요 관리자 인프라
  • 문서 공유, 프로젝트 작업 흐름 관리 등 협력 소프트웨어(매우 중요한 보안 관리 문제 야기)
  • 기업 애플리케이션

등이 있다.

이처럼 ‘내부’ 애플리 케이션으로만 여겨졌던 예전과 달리 외부로 직접 서비스를 제공함으로써 비용을 단축하는 경향이 커졌다.

이런 방식을 ‘클라우드’ 솔루션이라고 하는데, 비즈니스에 중요한 데이터와 기능이 잠재적인 공격자에게 공개 될 수 있으며 기관이 통제하기 힘든 보안 방어를 해야만 한다.


[2] 웹 애플리케이션 보안

신기술이 늘 그렇듯 웹 애플리케이션도 새로운 영역의 보안 취약점을 함께 가져왔다.

웹 애플리케이션에게 가장 위험한 공격 :

  1. 중요한 데이터를 빼내는 것
  2. 애플리케이션이 실행되는 동안 백엔드 시스템에 제한 없이 접근하는 것


“이 사이트는 안전합니다.”

  • 대부분의 애플리케이션은 SSL을 사용하고 있기 때문에 안전하다는 문구를 내놓는다.

  • 기관들은 PCI(지불카드산업 - 정보보안 안전규정)표준을 준수하고 있어 안전하다는 문구를 내놓는다.

하지만 실제로 완벽하게 안전하지 않다.

일반적으로 알려진 종류의 취약점을 보유한 애플리케이션 비율

  • 인증실패(62%) - 로그인 메커니즘상의 다양한 취약점
  • 접근 통제 실패(71%) - 민감한 데이터, 기능에 대해 사용자 접근 통제 불가
  • SQL 인젝션(32%) - 조작된 입력 값을 제공해 DB 데이터 공격
  • 크로스사이트 스크립팅(94%) - 사용자에게 악의적인 공격 수행하게 하는 취약점
  • 정보 누출(78%) - 공격자가 공격을 위한 정보 수집
  • 크로스사이트 요청 위조(92%) - 사용자가 의도치 않은 행동을 수행


SSL은 매우 뛰어난 기술임에는 틀림지만, 애플리케이션 서버와 클라이언트 컴포넌트를 직접 공격하는 데에는 아무런 방어책이 되지 못한다.

-> 어떤 사이트에 SSL이 채택됐는지와 무관하게 사이트는 보안 결함을 내포한다.


보안 문제의 핵심

사용자가 임의의 입력 값을 제공할 수 있다.

웹 애플리케이션의 설계자나 개발자는 항상 사용자의 입력 값이 잠정적으로 위험할 수 있다고 가정해야 한다.

보안 문제점은 여러가지 방법으로 확인할 수 있다.

  • 클라이언트 쪽에 구현된 보안 장치는 쉽게 무력화될 수 있다.
  • 사용자가 개발자가 예상했던 절차대로 사용하지 않을 수 있다.
  • 사용자는 반드시 웹 브라우저 만을 사용하지 않는다. (브라우저가 생성하지 못하는 요청 값을 만들 수 있다.)
  • HTML 폼 필드에 보이지 않는 값으로 값을 변조할 수 있다.
  • HTTP쿠키 안에 포함돼 전달되는 세션 토큰을 조작할 수 있다.
  • 정상적으로 제공될 특정 값을 제거할 수 있다.
  • 악의적인 쿼리를 강제로 삽입해 입력 값을 조작할 수 있다.

SSL은 이와 같은 조작된 입력 값을 서버에 제공하는 것을 막지 못한다.

SSL은 네트워크 상에 있는 다른 사용자가 해당 통신 내용을 보거나 변조하지 못한다는 것만을 의미한다.


[3] 주요 문제점

1. 미성숙한 보안 의식

네트워크나 운영체제와 관련한 보안 취약점보다, 웹 애플리케이션 보안 문제에 대한 인식이 성숙한 편이 아니다.

웹 애플리케이션 개발자는 점점 더 많은 서드파티 패키지를 함께 적용할 줄 알아야하며, 근본적인 기술을 놓치지 않게 개발자의 역할이 커지고 있다.


2. 자체개발

대부분의 웹 애플리케이션은 해당 조직의 자체 인력 or 외주 비정규직 인력에 의해 개발된다.

이런 상황에서 모든 애플리케이션은 다른 곳과는 다른 고유한 결함을 갖게 된다.


3. 개발 간편화의 함정

(이 부분을 읽고 반성하게 되었다…)

요즘에는 초보 개발자라도 아주 강력한 애플리케이션을 단시간에 만들 수 있다.

그러다 작동되는 코드안전한 코드는 판이하게 다른 일이다.

많은 웹 애플리케이션이 보안 문제를 미리 예상할 지식이나 경험조차 없는 초보개발자들에 의해 만들어 지고 있다.

최근 동향은 이미 상용화된 코드 구성을 사용해 사용자 인증, 백엔드 인프라 구성 등의 다양한 기능을 다룬다.

이미 만들어진 코드를 사용하면 쉽고 빠르게 애플리케이션을 만들 수 있지만, 애플리케이션 작동에 대한 기술적인 이해와 잠재적인 위험성에 대해 무지해질 수 있다.


4. 빠르게 진화하는 위협 프로파일

웹 애플리케이션 공격과 방어에 대한 연구는 계속해서 빠른 속도로 발전한다.

특정 공격에 대해 이미 방어를 했더라도 새로운 공격 기술로 방어를 뚫을 수 있다.


5. 기능에 대한 요구 증가

애플리케이션은 기능과 용이성을 최우선시해 설계한다.

근래 웹사이트에서는 암호 복구, 암호 힌트, 암호를 컴퓨터에 저장 등 여러 기능이 추가 됐다.

이런 사이트에서는 다양한 보안 기술로 자신의 사이트가 안전하다고 하지만, 사실 다양한 방법으로 공격이 가능한 경우가 많다.


6. 자원과 시간 제약 요소

대부분의 웹 개발 프로젝트들은 시간과 자원의 부족에 쫓기게 된다. 그러니 시스템 설계나 개발에 전담 보안 전문가가 참여하기 어렵고 보안 테스트도 거의 이뤄지지 않는다.

=> 많은 시간 인내를 통해 확인 할 수 있는 매우 미묘하지만 중요한 취약점을 알려주지 못할 것이다.


7. 지나치게 학장돼 응용된 기술

웹 애플리케이션에 적용된 기능들은 원래 의도했던 목적보다 지나치게 학장돼 활용되고 있다. 이에 따라 예상치 못했던 부작용이 나타나고 결국 새로운 보안 취약점으로 귀결되고 있다.



여러 가지 웹 애플리케이션 보안의 증거에서 보이듯 이런 문제들이 획기적으로 해소되지 않고 남아있다.

웹 애플리케이션을 운영하는 기관이나 사용자에게나 웹 애플리케이션 공격은 중요한 위협으로 자리잡고있다.