웹어플리케이션이라함은 브라우저를 통해 접근할 수 있는 소프트웨어 응용프로그램으로 통상 서버 측에서 비즈니스 로직을 실행하고, 클라이언트 측에서 웹 브라우저를 이용하여 운용할 수 있는 프로그램을 UI를 구현한다.
그림1. 전형적인 웹어플리케이션의 아키텍처
1.2 보안
[보안의 3요소]
- 비밀성(Confidentially)정보는 소유자가 원하는 대로 비밀이 유지되어야 한다
허가받지 않은 비인가자나 프로세스에게 정보가 노출되지 않도록 하는 것을 보장한다.
인가받은 사람만이 정보에 접근할 수 있어야 한다.
비밀성 보장을 위한 수단에는 접근통제, 암호화 등이 있음 - 무결성(Integrity)비 인가된 자에 의한 정보의 변경, 삭제, 생성을 보호하여 정보의 정확성과 완전성이 보장되게 한다.
무결성을 통제하기 위한 수단에는 물리적 통제, 접근 통제 등이 있음 - 가용성(Availability)정보시스템은 적절한 방법으로 작동되어야 하며, 정당한 방법으로 권한이 주어진 사용자에게 정보서비스를 거부하여서는 안 된다는 원칙
가용성 확보를 위한 통제 수단에는 데이터백업, 중복성 유지, 물리적 위협 요소로부터 보호등이 있다.
다음은 대표적인 보안 평가 기준이다.
- TCSEC (Trusted Computer System Evaluation Criteria)Orange Book이라고도 부름
1985년 미국방부 표준으로 채택된 컴퓨터 시스템 보안성 평가 기준
다른 나라의 보안성 평가 기준서에 큰 영향을 미침
등급 : (낮음)D, C1, C2, B1, B2, B3, A(높음) - ITSEC (Information Technology Security Evaluation Criteria)영국, 독일, 프랑스, 네덜란드 등에서 사용하는 보안성 평가 기준
등급 : (낮음)E0 ~ E6(높음) - CC (Common Criteria)국제 공통 평가 기준
세계 각국의 평가 기준이 상이하여 평가에 비용과 시간에 많이 소요되는 문제점을 해결하기 위함
등급 : (낮음)EAL0 ~ EAL7(높음)
[보안및해킹 영역]
- 시스템 보안
운영체제 취약점 -> 패치 및 업그레이드
환경설정 취약점 -> 주기적인 감사 - 네트워크 보안
네트워크 취약점 -> 방화벽, IDS(Intrusion Detection Systems : 침입탐지시스템), VPN(Virtual Private Network : 가상사설망), IPS(Intrusion Prevention Systems : 침입방지시스템)
프로토콜 취약점 -> DoS(Denial of Service : 서비스 거부 공격), DDoS(Distributed Dos : 분산서비스 거부 공격), DrDoS(Distributed Reflection DoS : 분산 반사 서비스 거부 공격) 방지 - 웹보안 (전체 해킹 중 80% 이상 비중 차지함)
웹서버와 방화벽의 보안을 강화
개발시 보안을 고려해서 코딩
DBMS 취약성을 패치를 통해 보안을 강화
[최신 보안 이슈]
- 키보드보안인터넷 뱅킹 및 쇼핑몰의 온라인 거래 시 필수적으로 입력되는 개인정보 유출
유출시 금융사고로 직결
사용자의 키보드 입력정보를 도청하는 것을 방지
사용자 PC에 키보드 보안을 위한 Key device driver 설치
사용자 Key 입력시 Filter driver나 Hooking driver를 통해 입력 값을 가로채서 암호화한 후 해당 어플리케이션에 전달
키로거 기술은 키로거에 감염된 컴퓨터를 쓰는 사람들의 키보드 입력을 기록하는 것 - 파밍(Pharming)범죄를 목적으로 하는 해커들이 인터넷 트래픽을 원래 사이트에서 동일해 보이는 다른 사이트로 리다이렉션하여 사용자가 가짜 사이트의 데이터베이스에 사용자 이름과 암호를 입력하도록 하는 수법
가짜 웹사이트의 사용을 의미하는 파밍은 전자메일 피싱사기와 비슷해 보이나, 사용자의 참가 또는 지식이 전혀 없는 상태에서 가짜 사이트로 리다이렉션 될 수 있다는 점에서 좀 더 교활한 사기 수법
DNS 서버를 공격하거나 사용자의 host 파일을 공격하여 URL의 IP를 크래커의 IP로 변조 - 피싱(Phishing)개인정보를 낚시하듯 낚아챈다는 뜻에서부터 유래
AOL 계정 도둑에서 유래 네티즌이 만드는 온라인 백과사전 위키피디아에 따르면 피싱은 1996년 처음 등장, 당시 해커들이 아메리카온라인(AOL)계정을 훔치려고 사용한 수법
[네트워크 보안]
- DoS 공격
시스템이나 네트워크의 구조적인 취약점을 공격하여 리소스를 고갈시켜 정상적인 서비스를 지연시키거나 마비시키는 공격
=> 방화벽 설치, IDS 운영, 안정적인 네트워크 설계 - Spoofing
사전적으로는 "속이기"라는 의미이며, 다른 시스템의 신뢰관계를 속여 침입하는 해킹기술 - Sniffing
컴퓨터 네트워크 상에 흘러 다니는 패킷을 엿듣는 도청과 같은 행위
=> 암호화, 스니퍼탐지 - Session Hijacking
클라이언트의 세션을 가로채서 일시적으로 클라이언트 세션을 끊고 세션을 빼앗아 인증을 회피하는 방법
[서버시스템 보안]
- 슈퍼유저 통제
슈퍼유저 권한에서 보안관리 권한을 분할하여 보안관리자에게 이관
슈퍼유저의 로그인 위치 및 로그인 방법 통제
일반 사용자의 su사용 통제
슈퍼유저의 권한 중 필요한 부분을 일반사용자에게 이양
핵심자원에 대한 접근 통제 (프로세스 kill 방지, 핵심파일 접근 통제) - 접근통제 강화
모든 사용자에게 별도의 계정을 할다하여 개인별 책임 추적성 구현
계정 보호 구현
=> 비 활동성 계정 정리, 임시 계정 발급 및 말소 절차 구현, 패스워드 강화 정책 구현
반복적인 로그인 시도 통제
파일 시스템 통제를 강화하기 위해 퍼미션 모드를 세분화 하여 접근 통제 정책을 수립
백업 오퍼레이터는 특정 시간에 특정 백업 소프트웨어를 사용해서만 전체 시스템 읽을 수 있도록 함
불필요한 TCP 서비스를 모두 제거하고 포트별로 서비스 대상 네트워크, 호스트, 터미널을 통제
중요 위반 사항 발생시 감사 로그 - 로그 보호
분산되어 있는 시스템 파일들의 변경에 대한 감사 정책을 수립
특정 로그 파일들은 반드시 관련 프로세스에 의해서만 변경되도록 하여 슈퍼유저 권한으로도 조작 할 수 없도록 통제 정책을 수립
원척적으로 조작이 불가능한 별도의 감사로그의 운용 - 관리 강화
일관된 보안 관리 수준
직무기반 접근 통제를 수립하여 통제 정책을 구현
=> 반복적인 통제 정책의 수립작업을 피한다.
서버간 통제 정책의 자동 전파
로그 필터링 및 라우팅
=> 정책 시뮬레이션 기능을 구현 - 통제 정책의 수립, 시험, 적용
[어플리케이션 보안]
- 사용자 인증 및 접근 통제
상호인증, 복합인증의 지원
=> SmartCard, OTP, 인증서 등 - 권한별 접근 제어
- 기밀성 유지를 위해 전송중인 데이터 암호화 및 무결성 보장
- 감사 및 추적을 위한 로그
- 어플리케이션 개발시 자체적인 취약성으로 발생할 수 있는 불법적인 접근을 차단하기 위해 개발 단계부터 보안 취약성을 고려한 개발
[데이터 보안]
- 접근제어
강력한 인증 시스템 필요
모든 커넥션에 대한 접근 통제 - 권한관리
세부적인 권한 제어
완벽한 통제를 위한 미리 등록된 SQL만 수행이 가능하도록 하는 기능 - 데이터 암호화
정보는 모두 암호화하여 저장
암호화를 풀 수 있는 권한은 DB관리자에게는 주지 않고 보안 담당자만 가능하도록 함
DB관리자나 시스템 관리자들이 사용하는 모든 툴은 서버와 통신을 할 때 데이터를 암호화 - 감사
사고 원인 추적을 위해 DB에서 사용된 SQL을 모두 기록하고 원하는 것을 추출할 수 있어야 함
보안 규칙 위반시 경고할 수 있어야 함
[경계선 보안]
- 시설 접근 통제
잠금 장치 - 인적 접근 통제
piggybacking에 대한 예방, 마그네틱 카드
[piggybacking - 승인된 사용자나 사람이 들어가는 경로를 몰래 같이 들어 가는 것으로 출입문이 열려 있을때 재빨리 들어가는 방법, 또는 전송회선이나 전화선에 인가된 경로로 비 인가된 라인을 연결하여 도청하는 방법 등을 의미] - 외부 경계 보호 매커니즘
[물리적 보안]
- 관리적 통제
시설선택 또는 건설
시설관리
인적 통제
훈련, 비상 대응 및 절차 - 기술적 통제
접근 통제
침입탐지, 경보, 모니터링
난방, 통풍, 공기조절 통제
전력공급
화재 탐지 및 진압
백업
HVAC(Healing, Ventilating, and Air Conditioning) - 물리적 통제
담장
잠금 장치
조명, 시설 건축 자재
1.3 인터넷 서비스 구성
[인터넷의 구성요소]
- WWW (World Wide Web)
초기 : 정적인 링크를 이동, 정적인 데이터 (HTML 문서)
현재 : 동적인 데이터의 필요성, 웹을 이용한 데이터 처리
최신 : Web 2.0 참여와 공유를 통한 정보의 유통 - Hyper Text
60년대에 테드 넬슨이 만들어낸 신조어
다른 문서와 연관관계를 가지는 텍스트를 의미
하이퍼텍스트를 이용하면, 문서를 읽는 사용자는 단어나 문구를 마우스를 클릭하여 관련제에 대한 정보를 추가로 얻을 수 있다. - HTML (Hyper Text Markup Language)
하이퍼텍스트를 효과적으로 전달하기 위한 언어 - HTTP (Hyper Text Transfer Protocol)
웹서버와 웹 브라우저간에 정보를 교환할 목적으로 사용되는 프로토콜
[HTTP Protocol]
- Stateless Protocol
이전 상태를 기억하지 못함
접속을 요청하는 사용자에게 서비스를 제공하고 즉시 세션을 끊음으로써 또 다른 요청을 처리할 수 있는 장점(효율적인 통신이 가능)
쿠키 또는 세션 정보를 이용하여 사용자의 인증 정보를 유지
FTP나 Telnet처럼 한번 접속하면 접속을 끊을 때까지 연결된 상태를 유지하는 것이 아니고, 요청이 있을 때 접속을 연결한 다음 응답을 받고 나면 접속을 끊는 프로토콜임 - HTTP Version
▷ HTTP/0.9
단순한 서버로부터의 읽기 기능만 지원
▷ HTTP/1.0
하나의 문서에 그림이 하나 있더라도 최초 텍스트가 저장된 HTML 문서를 전송 받고 난
뒤 연결을 끊고, 그림을 받기 위해 다시 연결을 설정 한 후 그림을 전송 받는다.
▷ HTTP/1.1
2001년 공식적으로 출시
연속된 연결 요청이 있을 경우에 HTML 문서를 받고 난 후 연결을 끊지 않고 바로 그림 파
일을 요청한다
HTTP/1.0 에 대해 추가된 내용
- 계층적이지 않은 프락시 지원
- 캐시의 지원
- 부적절한 지속적인 연결과 가상 호스트 통제
URL 형태
1.0버전과 다른 가장 큰 특징은 질의를 통해 데이터를 전송하는 것을 지원한다는 것이다.
동적인 웹 어플리케이션의 주요 부분이긴 하지만 공격의 주요 부분이 되기도 한다. 실제
로 공격자들이 가장 좋아하는 공격 부분이 이 질의를 하는 부분이다.
[HTTP Request]
- 구성GET http://localhost:8080 HTTP/1.0
Accept: */*
Referer: http://localhost:8080/sample/board/List.jsp
Accept-Language: ko
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1
.4322; InfoPath.2) Paros/3.2.13
Host:localhost:8080
Content-length:0
Pragma: no-chache
Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - Request 메소드
- GET
요청받은 정보를 검색해 온다.
브라우저의 URL 창에 전달 변수 값이 보인다.
보낼 수 있는 데이터의 크기가 최대 4KB
- POST
서버가 동봉된 정보를 받아들이고, 서버에서 동작하도록 하는 요청을 한다.
URL에 요청 데이터를 기록하지 않고, 소켓을 이용해 데이터를 전송.
보낼 수 있는 데이터의 크기 제한 없음
- CONNECT
HTTP/1.1 추가 요청 방식
동적 모드로 터널 모드를 교환 할 수 있는 능력을 가진 프록시를 사용한다.
- DELETE
HTTP/1.1 추가 요청 방식
명시된 리소스를 서버가 삭제 할 것을 요청한다. 기본적으로 이 기능은 대부분의 서버에서 비
활성화 되어 있다.
- HEAD
GET 방식과 거의 같지만 요청받은 자료를 되돌려 주지 않는다.
서버 측의 데이터를 검색하고 요청하는데 사용된다.
- OPTIONS
요청 받은 리소스에서 가능한 통신 옵션에 대한 정보를 요청한다.
만일 "*"가 사용되면 요청받은 리소스는 일반적이라고 여겨지고, 오직 일반적인 것만 허용하
는 이 요청 방식으로 응답한다.
예를 들어 "*"를 사용하는 것은 오직 GET, HEAD, OPTIONS, TRACE 요청방식에서만 볼 수
있다. 그러나 "/"는 모든 요청방식에서 허용한다.
헤커들의 관점에서 상당히 유용한 정보를 제공해 줌
- PUT
내용이 제공되는 리소스에 저장되기를 바라는 요청
- TRACE
루프백 메시지를 위한 요청을 송신한다.
요청은 목적서버로 송신되지만 프록시가 대신 응답하기도 한다.
클라이언트가 보내는 요구 메시지가 거쳐가는 프록시나 게이트웨이의 중간 경로 및 최종 수
신 서버까지 이르는 경로를 알아내는 데 쓰인다.
[HTTP Response]
- 구성HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=EUC-KR
Content-Length: 1866
Date: Wed, 04 Jun 2008 06:39:03 GMT
Connection: close - HTTP Response Code
- 100번대 : 정보전송
- 200번대 : 성공
- 300번대 : 리다이렉션
- 400번대 : 클라이언트 측 에러
- 500번대 : 서버측 에러
[웹 프록시]
HTTP 프록시는 인터넷 사용자가 자신의 IP 주소를 숨김으로써 자신의 온라인 ID를 변장하는 데 사용될 수 있다. 즉, 사용자가 웹 서핑을 익명으로, 일종의 게이트웨이 역할을 수행하여 완전히 익명 사용자의 IP 주소 아래 웹사이트를 방문할 수 있도록 할 수 있다. 그러나 안전하지 않은 HTTP 프록시가 있다. 일부 열려있는 HTTP 프록시들 중에는 불법 복제 시도와 사기 등에 사용자가 노출될 수 있다.