발자취

#01 웹 어플리케이션 보안 개요 본문

3-1/웹 어플리케이션 보안

#01 웹 어플리케이션 보안 개요

해린 2023. 3. 18. 00:01

웹 어플리케이션이란?

인터넷을 통해 웹 브라우저에서 이용할 수 있는 응용 프로그램.

 

웹 브라우저란?

웹 서버에서 이동하며 쌍방향으로 통신하고 HTML 문서나 파일을 출력하는 그래픽 사용자 인터페이스 기반의 응용 소프트웨어.

(예: 구글 크롬, 인터넷 익스플로러, 사파리 등)

[출처: 위키백과]

 

웹 어플리케이션의 기능

- 쇼핑

- 소셜 네트워킹 (Facebook)

- 온라인 뱅킹

- 웹 검색 (Google)

- 경매

- 도박

- 웹로그 (Blog)

- 웹메일

- 대화형 정보 (Wikipedia) 등

 

웹 어플리케이션의 혜택

위의 기능들은 HTTP 프로토콜과 브라우저 프로그램 덕분에 사용할 수 있는 것이다.

 

▶ HTTP 프로토콜 (비접속 기반)

  • 비접속 기반: 연결을 맺지 않고 클라이언트는 클라이언트 대로, 서버는 서버대로 자기가 받은 요청에만 응답함. 즉, 클라이언트와 서버가 별도의 방식대로 따로따로 돌아가는 것.

 브라우저 프로그램: 사용자의 편의를 위한 프로그램. 우리가 굳이 쓰는 방법을 배우지 않아도 된다!

  • 실용적이고 다양한 사용자 인터페이스를 구축하게 함.
  • 웹 인터페이스는 표준 입력 방식을 사용하기 때문에 사용자가 애플리케이션마다 개별적인 기능을 배우지 않아도 됨.
  • 클라이언트 측 스크립트를 활용하여 브라우저의 처리 범위를 확장할 수 있음. => 자바 스크립트로 다양한 기능들을 사용자가 구현할 수 있도록 함.

 기본적으로 설치된 브라우저:

  • 거의 다 자동으로 설치되어 있기 때문에 별도의 클라이언트 소프트웨어를 배포하고 관리할 필요가 없음.
  • 사용자 인터페이스에 대한 변경은 서버에서만 이루어짐.

 웹 어플리케이션 개발 환경:

  • 어플리케이션 개발을 위해 다양한 플랫폼과 개발 툴이 제공됨.
  • 많은 양의 오픈 소스 코드와 리소스들도 사용 가능함.

 

웹 어플리케이션의 취약점은?

 SSL (Secure Socket Layer)

  • http's'도 SSL을 사용한 예이며, SSL을 사용하면 기본적으로 암호화가 되어 정보가 유출되지 않도록 해줌.
  • 사용자 브라우저와 웹 서버 사이에서 오가는 데이터의 무결성 기밀성을 보호해줌.
  • 무결성과 기밀성만을 보호해주기 때문에 서버와 클라이언트를 향한 직접적인 공격과 같은 이외의 문제들은 해결할 수 없어 완전히 안전하지 않다.

인증 실패 (67%의 확률로 공격 성공)

  • 어플리케이션의 로그인 매커니즘과 관련한 다양한 취약점.
  • 정상적인 아이디, 패스워드만 로그인 되어야 하는데 공격자가 입력한 임의의 값이 들어갔을 때 로그인이 우회되는 등의 문제
  • 이 취약점을 활용한 공격으로는 추측 가능한 패스워드, 무차별 대입 공격, 인증 우회 공격 등이 있다.

▶ 접근 제어 실패 (78%의 확률로 공격 성공)

  • 어플리케이션의 데이터나 기능에 대해서 공격자의 불법적인 접근을 보호하지 못하는 경우

▶ SQL 주입(injection) 공격 (36%의 확률로 공격 성공)

  • SQL 데이터베이스 안의 취약점을 활용해서 하는 공격
  • 조작된 입력 값을 쿼리로 제공해서 어플리케이션과 데이터베이스의 연동을 방해함. => 정상적인 DB는 거절하겠지만 취약점을 갖는 경우엔 응답을 함으로써 공격을 성공하게 됨.
  • 어플리케이션으로부터 임의의 데이터 값을 획득하거나 애플리케이션 로직을 회피할 수 있음.

▶ 크로스사이트 스크립팅 (91%의 확률로 공격 성공)

  • 어플리케이션의 다른 사용자들의 데이터를 불법적으로 액세스 하고, 사칭하여 불법적인 행동을 수행함.
  • 웹사이트와 웹사이트 사이의 취약점을 사용해서 공격자가 어떻게 자바 스크립트를 작성하냐에 따라 다양한 공격이 가능함. 그렇기 때문에 공격 성공률이 높음.

▶ 정보 유출 (81%의 확률로 공격 성공)

  • 사적으로 민감한 정보들이 공격자에게 유출됨.'

 

보안 문제의 핵심은? 뭐가 문제라서 위와 같은 취약점이 발생하는가?)

▶ 사용자가 임의의 입력 값을 제공할 수 있음 (가장 큰 문제!)

  • 클라이언트는 어플리케이션의 제어 밖에 있기 때문에 사용자는 독립적으로 서버 측에 있는 어플리케이션에 임의의 입력값을 제출할 수 있음. (즉, 클라이언트의 입력 값을 어플리케이션이 제어할 수 없으며, 서버에서 조작된 입력 값을 탐지 및 필터링하는 것이 쉽지 않음.)
  • 사용자의 입력 값은 잠재적으로 위험할 수 있음. => 정상적인 사용자는 원래 의도된 입력 값을 입력하겠지만, 공격자는 조작된 입력 값을 입력하여 어플리케이션의 로직이나 기능을 훼손할 수 있음.
  • 임의의 입력 값의 구체적인 문제점은?
    • 사용자(=공격자)는 프록시를 이용하여 클라이언트와 서버 사이에서 전송되는 데이터를 간섭 및 변경할 수 있음.
    • 사용자는 요청 횟수를 임의대로 할 수 있음.
    • 사용자가 어플리케이션에 접속하는데 사용하는 도구는 웹 브라우저 뿐만 아니라 다양하기 때문에 이 다양한 도구들을 이용해서 공격에 사용할 수 있음.

 

보안 문제의 주요 요소

  • 미성숙된 보안 의식
  • 자체 개발: 웹 어플리케이션들은 회사보다 개인이 오픈소스 툴을 사용해서 자체 개발을 하는 경우가 많은데 이런 경우, 보안적인 요소를 고려하지 않는 경우가 많다.
  • 빠르게 진화하는 위협 프로파일: 공격의 흐름과 기법이 방어 속도를 넘어서서 빠르게 진화하기 때문에 대응이 쉽지 않음.
  • 자원과 시간제약 요소: 시간의 한계/제약이 있어서 보안적인 요소를 제대로 다루지 않는 경우가 있음.
  • 지나치게 확장된 응용 기술: 기술들이 빠르게 확장하고 발전하기 때문에 그런 곳에서 생길 수 있는 보안 문제를 대응하기가 쉽지 않음.