큰틀에서의 차이를 보면,대칭키 암호화 방식은암복호화에 사용하는 키가 동일한 암호화 방식을 말한다. 그와 달리,공개키 암호화 방식은암복호화에 사용하는 키가 서로 다르며 따라서 비대칭키 암호화라고도 한다. 따라서 공개키 암호화 에서는 송수신자 모두 한쌍의 키(개인키, 공개키)를 갖고있게 된다.
대칭키란, 장단점
대칭키는 위에서 설명한대로 암복호화키가 동일하며 해당 키를 아는 사람만이 문서를 복호화해 볼 수 있게된다. 대표적인 알고리즘으로는 DES, 3DES, AES, SEED, ARIA 등이 있다.
공개키 암호화 방식에 비해속도가 빠르다는 장점이 있지만,키를 교환해야한다는 문제 (키 배송 문제)가 발생한다. 키를 교환하는 중키가 탈취될 수 있는 문제도 있고 사람이 증가할수록 전부 따로따로 키교환을 해야하기 때문에관리해야 할 키가 방대하게 많아진다.
이러한 키 배송 문제를 해결하기 위한 방법으로키의 사전 공유에 의한 해결, 키 배포센터에 의한 해결, Diffie-Hellman 키 교환에 의한 해결, 공개키 암호에 의한 해결이 있다.
대칭키 암호화 방식: 암복호화키가 동일한 암호화 방식
대표 알고리즘 :DES, 3DES, AES, SEED, ARIA 등
장점 : 수행 시간이 짧음
단점 : 안전한 키교환 방식이 요구됨, 사람이 증가할수록 키관리가 어려워짐
공개키란, 장단점
위에서 설명한대칭키의 키교환 문제를 해결하기 위해 등장한 것이 공개키(비대칭키) 암호화 방식이다. 이름 그대로 키가 공개되어있기 때문에 키를 교환할 필요가 없어지며공개키는모든 사람이 접근 가능한 키이고개인키는각 사용자만이 가지고 있는 키이다.
예를 들어, A가 B에게 데이터를 보낸다고 할 때,A는 B의 공개키로 암호화한 데이터를 보내고B는 본인의 개인키로 해당 암호화된 데이터를 복호화해서 보기 때문에 암호화된 데이터는B의 공개키에 대응되는 개인키를 갖고 있는 B만이 볼 수 있게 되는 것이다.
1) B 공개키/개인키 쌍 생성
2) 공개키 공개(등록), 개인키는 본인이 소유
3) A가 B의 공개키를 받아옴
4) A가B의 공개키를 사용해 데이터를 암호화
5) 암호화된 데이터를 B에게 전송
6) B는암호화된 데이터를 B의 개인키로 복호화(개인키는 B만 가지고 있기 때문에 B만 볼 수 있음)
따라서 공개키는 키가 공개되어있기 때문에 따로 키교환이나 분배를 할 필요가 없어진다. 중간 공격자가 B의 공개키를 얻는다고 해도 B의 개인키로만 복호화가 가능하기 때문에 기밀성을 제공하며개인키를 가지고있는 수신자만이 암호화된 데이터를 복호화할 수 있으므로 일종의 인증기능도 제공한다는 장점이 있다. 그에 반해 단점은 속도가 느리다는 것이다.
- 전자상거래 지불 시스템에서 송신자가 일정 금액을 보냈으나 수신자가 금액을 받지 않았다고 부인하는 경우가 생기는데 이를 방지하기 위해 전자서명을 이용한다
- 전자서명은 원본의 해시값을 구한 뒤, 원본과 해시값을 같이 전송한다
- 수신자는 수신 받은 원본에서 해시값을 구한 다음 수신 받은 해시값과 비교하여 일치하면 그 문서는 변경되지 않은 것(무결성 확보)
- 이때 송신자는 그 해시값에 부인방지 기능을 부여하기 위해 공개키 방법을 사용
- 송신자는 메시지의 해시값을 구한 후 그 해시값을 송신자의 개인키로 암호화하여 보내는 것
- 수신자는 송신자가 보낸 해시값을 송신자의 공개키로 복호화하여 부인방지 기능을 확인한다
- 전자서명이란 전자문서에 서명한 사람의 신원을 확인하고 서명된 전자문서가 위조되지 않았는지 여부를 확인할 수 있도록 전자문서에 부착된 특수한 디지털정보를 의미
** 전자서명의 개발 배경
- 정보를 암호화하여 상대편에게 전송하면 부당한 사용자로부터 도청을 막을 수는 있다. 하지만 그 전송 데이터의 위조나 변조, 그리고 부인 등을 막을 수는 없다. 이러한 문제점들을 방지하고자 전자서명 기술이 개발되었다
■ 전자서명 서비스
① 메시지인증 : 변경여부 확인(해시함수 이용)해 무결성 기능을 제공
② 발신자(사용자) 인증 : 발신자 인증 기능을 제공. 즉, 전자서명은 발신자(서명 생성자)를 인증하는 기능이 있음
③ 부인방지 : 송신자의 개인키로 메시지 다이제스트를 암호화 후 송신한다. 수신자가 받은 암호화 된 메시지 다이제스트를 송신자의 공개키로 복호화가 된다는 것은 송신자만이 가지고 있는 송신자의 개인키로 메시지를 암호화 했다는 것
■ 전자서명의 주요 기능
1) 위조불가 (Unforgeable)
- 합법적인 서명자만이 전자서명을 생성하는 것이 가능해야 함. 즉, 위조가 불가능해야 한다
- 서명된 문서가 변형되지 않았다는 무결성(Integrity)을 보장한다
2) 서명자 인증 (User Authentication)
- 전자서명은 서명 생성자를 인증하는 기능이 있다
- 전자서명의 서명자를 불특정 다수가 검증할 수 있어야 한다
- 전자서명 된 문서를 타인이 검증해야 하므로 전자서명 알고리즘은 공개해야 한다
3) 부인방지 (=부인봉쇄, Non-repudiation)
- 서명자는 서명행위 이후에 서명한 사실을 부인할 수 없어야 한다
- 전자서명에서 부인방지는 송신자의 개인키로 해시값을 암호화 한 후(해시 후 서명 방식), 송신자의 공개키로 복호화(써명 검증)하여 부인방지서비스를 제공
4) 변경불가 (Unalterable)
- 서명한 문서의 내용을 변경할 수 없어야 한다
5) 재사용 불가 (Not reusable)
- 전자문서의 서명을 다른 전자문서의 서명으로 사용할 수 없어야 한다 (수신자가 문서를 재사용 할 수 없다)
- 전자서명에서 송신자와 수신자의 메시지 전송 도중에 갈취되어 복사되거나 도용되지 않도록 해주는 특징이 있다
■ 공개키를 사용하는 전자서명 방식 (부가형 전자서명 방식)
- 메시지의 해시값에 서명(개인키로 암호화)하는 전자서명 방식
- 메시지의 해시값에 서명하는 전자서명 방식은 기밀성을 보장하지 않음
- 메시지를 암호화 하지 않아 기밀성을 보장하지 못하는 이유는 메시지를 B의 공개키로 암호화 하면 속도 저하가 크기 때문
- 공개키 기반 전자서명에서 메시지에 서명하지 않고 메시지의 해시값과 같은 메시지 다이제스트에 서명하는 이유는 공개키 암호화에 따른 성능 저하를 극복하기 위한 것
○ 메시지의 해시값에 서명하는 방법
- 송신자는 일방향 해시함수로 메시지의 해시값을 계산
- 송신자는 자신의 개인키로 해시값을 암호화
- 송신자는 메시지와 서명을 수신자에게 송신
- 수신자는 수신한 서명을 송신자의 공개키로 복호화
- 수신자는 얻어진 해시값과 송신자로부터 직접 수신한 메시지의 해시값을 비교
□ 공개키 방식을 이용한 전자서명의 문제점
- 공개키 암호화 방식은 공개키 저장소(공개키 레파지토리)의 공개키가 바꿔치기 당하는 중간자 공격에 취약
- 공개키가 누구의 것인지 확인해 주는 과정이 필요. 즉 공개키 인증서(Public Key Certificate) 확인 과정이 필요
■ 전자서명 특징
- 디지털 서명은 기밀성을 지키기 위한 것은 아니다
- 서명을 복사하더라도 서명자, 메시지의 내용이 바뀌지는 않기 때문에 서명이 무의미해지는 것은 아니다
■ 전자서명 구비조건 (제공기능)
① 무결성 (Integrity) 기능 제공 : 문서내용 변경 여부를 확인할 수 있어야 함
② 서명자 인증 기능 제공 (User Authentication) : 서명자 이외의 타인이 서명을 위조하기 어려워야 한다. 또한 전자서명의 서명자를 누구든지 검증할 수 있어야 한다
③ 부인방지 (Non-repudiation) 기능 제공 : 서명자는 서명행위 이후에 서명한 사실을 부인할 수 없어야 함
④ 재사용 불가 (Not reusable) : 전자문서의 서명을 다른 전자문서의 서명으로 재사용 할 수 없다
⑤ 위조불가 (Unforgeable) : 합법적인 서명자만이 전자서명을 생성할 수 있어야 한다. 즉 서명자 이외의 타인의 서명을 위조하기 어려워야 한다
■ 메시지 복원형 전자서명 (메시지에 직접 서명하는 방식)
- 해시함수를 사용하지 않고 송신자가 메시지를 송신자의 개인키로 암호화하여 전송한 후 수신자는 송신자의 공개키로 메시지를 복호화하여 검증하는 방법
- 기존의 공개키 암호 방식을 사용하여 별도의 전자서명 프로토콜이 필요하지 않다는 장점이 있으나, 메시지를 일정한 크기의 블록으로 나누어 그 각각의 블록에 서명을 해야 하므로 많은 시간이 소요되어 실제로는 사용되지 않는다
■ 전자서명이 제공하는 보안 서비스
① 본인 인증 : 사용자 인증을 의미하는 것으로서 인터넷상에서 전자문서의 작성자와 송신자의 신원을 확인하는 것
② 무결성 : 전자적 거래의 문서가 중간에 위조되거나 변조될 위험성을 해결하는 것으로서 메시지 인증 기술로 송신자가 수신자에게 보낸 메시지가 위조, 변조되지 않은 진본임을 확인하는 것
③ 부인방지 : 전자적 거래 이후 거래 사실을 부인하지 못하도록 하는 것으로서 부인방지는 메시지를 보낸 사람의 행위를 부인할 수 없을 뿐 아니라 메시지를 받은 사실 역시 부인할 수 없게 하여 전자적 거래를 완성시킨다
** 전자서명 자체가 기밀성(비밀성)을 보장하지 않는다
- 기밀성이란 전자문서의 내용이 외부로 유출될 위험성을 해결하는 것으로서 전송되는 메시지를 송신자와 수신자를 제외한 제3자는 볼 수 없도록 하는 것을 말함. 하지만 전자서명은 전자서명 자체가 문서 내용에 대한 기밀성을 보장하지는 않는다
- 메시지를 수신자의 공개키로 암호화하여 기밀성을 제공할 수 있으나 전자서명 특성상 결제 시 빠른 동작이 중요하고 메시지 자체가 기밀성을 요구하지 않아 메시지를 암호화 하지 않는다
■ 서명 방식의 종류
1) 은닉서명 (Bind Signature)
- 서명자가 자신이 서명하는 메시지를 알 수 없는 형식으로 봉투 내의 내용을 보지 않고 겉면에 서명을 하면 내부의 잉크에 의해 서류에 서명이 되는 원리를 이용하는 방식 (먹지)
2) 수신자 지정서명
- 서명을 검증할 때 특정 검증자만이 서명을 확인할 수 있으며 만일 서명에 문제가 있을 경우, 검증자의 비밀 정보를 노출시키지 않고 제3자에게 서명의 정당성을 증명하는 서명 방식
3) 부인방지 서명 (Undeniable Signature)
- 서명을 검증할 때 반드시 서명자의 도움이 있어야 검증이 가능한 방식
4) 위임서명 (Proxy Signature)
- 위임서명자로 하여금 서명자를 대신해서 대리로 서명할 수 있도록 한 방식
5) 다중서명 (Multisignature)
- 동일한 전자문서에 여러 사람이 서명하는 방식
6) 이중서명 (Dual Signature)
- 신용카드 기반 지불시스템인 SET (Secure Electronic Transaction) 에서는 상점이 카드 사용자의 계좌번호와 같은 정보를 모르게 하는 동시에, 상점에 대금을 지불하는 은행은 카드 사용자가 구매한 물건을 알지 못하지만 상점이 요구한 결제 대금이 정확한지 확인할 수 있게 하기 위해 사용되는 방식
- 전자지불시스템(SET)에서 판매자(상점)에게 구매자의 결제정보(주문정보)를 보호하고 지불게이트웨이(PG)에게 구매자의 구매정보를 보호하기 위한 서비스이다 (상인은 고객의 잔고를, 은행은 구입정보를 모르게 한다)
- 주문정보의 메시지 다이제스트(해시값)와 지불정보의 메시지 다이제스트(해시값)를 구하고, 두 정보의 메시지 다이제스트(해시값)를 합하여 생성된 새로운 메시지의 메시지 다이제스트(해시값)를 구한 후, 고객의 서명용 개인키로 암호화한 것
- 즉 이중서명은 고객의 겨제 정보가 판매자를 통하여 해당 지급정보 중계기관으로 전송됨으로 인하여 고객의 결제정보가 판매자에게 노출될 가능성과 판매자에 의해 결제정보가 위ㆍ변조될 가능성을 제거한다
■ 은닉서명 (like 먹지를 이용한 서명)
- D.Chaum이 제시한 특수 형태의 전자서명 기법으로 사용자 A가 서명자 B에게 자신의 메시지를 보여 주지 않고 서명을 얻는 방법을 말함
- 메시지의 비밀을 지키면서 타인의 인증을 받고자 하는 경우에 주로 사용 (눈 감고 서명하기)
- 전자화폐를 사용하는 데 있어서 사용자의 사생활을 보호하는 차원에서 제시된 서명 기법
- 사용자가 서명자, 즉 은행에게 서명을 받으려는 문서를 비밀로 한 채 은행의 서명을 받는 방법으로 전자화폐에 대한 추적을 불가능하게 할 수 있는 기능을 제공한다
- 전자화폐 사용자의 신원노출 문제점을 해결하기 위한 서명 기술
- 전자서명과 서명자의 추적성을 차단한 전자서명 기술
★ 은닉서명의 목적
- 전자서명 사용 시 이용자의 프라이버시 노출을 보호하기 위해 사용
- 전자화폐 이용 시에 사용자의 신원 노출 문제점을 해결하기 위해 사용
★ 은닉서명의 특징
- 사용자의 익명성 보장
- 송신자의 익명성 보장
- 기본적으로 임의의 전자서명을 만들 수 있는 서명자와 서명 받을 메시지를 제공하는 제공자로 구성되어 있는 서명 방식으로, 제공자의 신원과 쌍(메시지, 서명)을 연결시킬 수 없는 익명성을 유지할 수 있는 서명 방식
★ 은닉서명의 문제점
- 은닉서명을 악용하는 사례 발생
- 전자화폐를 이용한 자금 세탁 등의 부작용이 발생
- 범죄에 대한 추적의 어려움이 발생 (강탈, 돈세탁)
- 전자서명 발급 이후에(메시지+서명) 쌍의 유효성을 확인할 수 있으나 자신이 언제, 누구에게 발행했는지를 알 수 없다(송신자의 익명성 보장)
AND AND 연산은 논리곱이라고도 하며 곱하기처럼 작용합니다. 이 연산에서는 모든 입력값이 1일 때만 1을 출력합니다. 다음은 진리표입니다: 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1
OR OR 연산은 논리합이라고도 불립니다. 이는 하나 이상의 입력값이 1이면 1을 출력합니다. 아래는 진리표입니다: 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1
XOR XOR 연산은 입력값이 같지 않으면 1을 출력합니다. 이는 두 입력 중 하나만이 배타적으로 참일 경우에만 일어납니다. 이 연산은 더해서 mod 2 를 구하는 것의 결과와 동일합니다. 다음은 진리표입니다: 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0
침입탐지 시스템(IDS)을 공부하다 보면 오용탐지와 이상탐지에 대한 내용이 나온다. 침입탐지 시스템의 탐지방법에 따른 분류인데오용탐지(Misuse Detection)는 악성패킷 등을 분석한침입 패턴(Rule Set)을 저장하여패턴과 동일하면 탐지하고,이상탐지(Anomaly Detection)는 오용탐지와 반대로정상 패턴을 저장하고이와 다르면 탐지하는 방식이다. 오용탐지는 저장된 침입 패턴으로 침입 여부를 탐지하므로오탐율(False Positive)이 낮지만, 미탐율(False Negative)이 높고알려지지 않은 패턴은 탐지할 수 없다. 특히제로데이 공격(Zero-day Attack)을 탐지할 수 없으며, 오용탐지를 시그니처(Signature) 기반 혹은 지식(Knowledge) 기반의 탐지 방법이라고 부른다. 이상탐지는 정상적인 패턴을 저장하여 이와 다르면 모두 침입이라고 탐지하므로,오탐율이 높지만, 미탐율이 낮고알려지지 않은 공격패턴, 특히제로데이 공격에 대응할 수 있다.
트랩도어란 시스템 보안이 제거된 비밀 통로로, 서비스 기술자나 유지ㆍ보수 프로그램 작성자의 접근 편의를 위해 시스템 설계자가 일부러 만들어 놓은 시스템의 보안 구멍을 의미합니다. 백도어(Backdoor)라고도 합니다. 대규모의 응용 프로그램이나 운영체제 개발에서는 코드 도중에 트랩도어라는 중단 부분을 설정해 쉽게 보수할 수 있도록 하고 있습니다.
사이버 범죄자들은 특정 기업이나 조직, 개인을 해킹하기 위해서 어떤 방법을 사용할까? 메일에 악성코드를 첨부해서 전달하는 방법, 정보시스템의 취약점을 이용하는 방법, 악성 행위 유포지를 이용하는 방법 등 다양한 방법이 알려져 있다. 그 중 이번 호에서는 해킹 사건·사고의 빈번한 원인이 되는 '워터링 홀(Watering Hole)‘ 공격에 대해 알아보자. 2018년 국내 A가상화폐 거래소는 워터링 홀 공격을 빌미로 200억 원어치의 가상화폐를 도난 당했다. 경찰은 사이버 범죄자가 워터링 홀 공격을 시작으로 했다는 발표를 했다.
1) 워터링 홀 공격이란
워터링 홀 공격이란 공격대상이 자주 방문하는 홈페이지를 사전에 악성코드에 감염시킨 뒤 공격대상이 접속 할 때까지 잠복하면서 기다린다. 그리고 공격대상이 접속하면 비로서 공격을 시도하는 수법이다. 홈페이지에 접속하는 모든 사용자를 공격하기 때문에 접속하는 모든 사용자가 공격의 대상이 될 수 있다. 워터링 홀의 어원은 사자가 먹잇감을 습격하기 위해 물 웅덩이 근처에 숨어 있는 모습을 빗댄 표현이다. 먹잇감이 물을 마시기 위해 물 웅덩이로 접근하면 숨어있던 사자가 기습 사냥에 나서는 것이다.
예를 들어 사이버 범죄자가 워터링 홀 공격으로 A사에 재직 중인 김씨의 컴퓨터를 해킹한다고 하자. 사이버 범죄자는 사전에 김씨가 자주 방문하는 홈페이지와 정보시스템을 조사, 분석한 후 악성코드에 감염시킨다. A사의 대표 홈페이지, 그룹웨어, 계열사 홈페이지 등이 될 수 있다. 다음으로 김씨가 홈페이지에 접속하면 잠복해있는 악성코드가 동작해 김씨 컴퓨터를 해킹하는 것이다. 대표적으로 브라우저에서 동작하는 Flash, Javascript, VBScript, ActiveX, XSS, HTML, Image 취약점 등을 공격에 사용한다.
2) 워터링 홀 공격과정
3) 워터링 홀 공격요소
워터링 홀 공격은 인터넷 브라우저에서 동작하는 다양한 엔진들의 취약점을 이용한다.
2. 크로스 사이트 스크립트 취약점(Cross Site Script)을 이용한 공격 분석
1) 크로스 사이트 스크립트 취약점을 이용한 공격 시나리오
사이버 범죄자는 공격대상이 자주 방문하는 홈페이지에 크로스 사이트 스크립트 취약점을 공격한다. 취약점이 발견되면 악성 행위 스크립트를 삽입해 공격대상이 접속할 때까지 기다린다. 해당 페이지에 공격대상이 접속을 하면 악성 스크립트가 실행이 된다.
① 사이버 범죄자는 크로스 사이트 스크립트 취약점이 존재하는 페이지에 악성 스크립트를 삽입한다.
- 악성 스크립트 구문 :
- 설명 : hook.js는 공격자 서버에서 동작하고 있는 BeEF 브라우저 후킹 공격 스크립트이다. 해당 스크립트 구문은 공격대상 PC에서 실행된다.
※ BeEF(Browser Exploitation Exploitation Framework) : 인터넷 브라우저를 이용한 여러 가지 공격 모듈을 가지고 있으며, 공격대상 PC에서 스크립트를 실행 시켜 공격한다.
② 피해자가 악성 스크립트가 삽입된 페이지에 접속한다.
③ 피해자 PC에서 스크립트가 실행되면서 인터넷 브라우저 후킹된다. 사이버 범죄자는 공격대상의 PC를 공격할 수 있게 된다.
2) 크로스 사이트 스크립트 취약점을 이용한 공격 분석
공격자는 BeEF 브라우저 후킹 도구를 동작시킨 후 공격대상이 자주 방문하는 홈페이지에 악성 스크립트 구문을 몰래 삽입한다. 공격대상이 해당 페이지에 접근할 경우 공격자에게 후킹되어 공격자는 홈페이지 로그인 쿠키(Cookie) 값을 탈취한다.
① 공격자는 BeEF를 동작시킨다.
② 공격대상이 자주 가는 홈페이지 게시판에 BeEF 후킹 스크립트 구문을 몰래 삽입한다.
③ 공격대상이 해당 페이지에 접근한다. 아무런 증상이 없어 보이지만, 공격자의 후킹 스크립트가 실행되고 있다. (피해자 IP: 192.168.111.4)
④ 피해자의 인터넷 브라우저가 후킹되어 공격자의 BeEF 콘솔에 등록된다.
⑤ BeEF 도구를 통해서 공격대상의 브라우저 관련 정보를 확인할 수 있다.
⑥ 아래와 같이 BeEF 도구에 각종 해킹툴 모듈을 추가하면 수백가지 취약점으로 공격 시도할 수 있다.
⑦ 아래와 같이 공격자는 파해자의 세션 쿠키 정보를 탈취할 수 있다.
⑧ 마지막으로 세션 쿠키 정보를 위조해서 피해자 계정으로 로그인 할 수 있다.
3) 크로스 사이트 스크립트 취약점을 이용한 공격 대응 방법
▶ 게시물에 HTML이나 자바 스크립트에 해당되는 태그 사용을 사전에 제한
▶ 사용자가 입력한 값에 대한 필터링 작업 필요
▶ 게시물의 본문, 제목, 댓글, 검색어 입력 창, 그 외 사용자 측에서 넘어오는 값에 대해서 필터링을 수행함
▶ 입력값에 대한 필터링 로직 구현 시 공백 문자를 제거하는 trim, replace 함수를 사용하여 반드시 서버 측에서 구현되어야 함
사이버 범죄자는 인터넷 브라우저 취약점을 공격하는 홈페이지를 개설한다. 피해자가 홈페이지에 접속하면 브라우저의 취약점을 공격해 공격명령을 실행한다. 홈페이지에 접속 한 것 만으로 사이버 범죄자의 명령이 실행되는 것이다.
① 사이버 범죄자는 인터넷 브라우저 취약점을 공격하는 홈페이지를 개설하거나 피해자가 즐겨 찾는 홈페이지에 몰래 삽입한다.
② 피해자가 감염 홈페이지에 접속한다.
③ 웹 페이지의 악성코드를 인터넷 브라우저가 프로세싱 하면서 공격구문이 실행된다.
- 악성코드 다운로드, 악성코드 실행, 계정 유출 등 다양한 공격이 가능
2) 인터넷 브라우저 취약점을 이용한 공격 분석
① 공격자는 인터넷 브라우저의 스크립트 엔진 취약점을 공격하는 코드를 작성해 홈페이지에 삽입한다. 해당 시나리오를 구현하기 위해서 CVE-2019-0752 취약점을 사용했다.
※ CVE-2019-0752 : 인터넷 익스플로러 10, 11버전의 VBScript 엔진의 취약점이다. 소스코드를 프로세싱 하는 과정에 메모리 취약점으로 공격 명령을 실행시킬 수 있다.
② 피해자가 해당 홈페이지에 접속하면 인터넷 브라우저가 스크립트 엔진을 실행하면서 공격자의 공격 명령이 실행된다.
※ 피해자 PC 정보 : 윈도우 10, 인터넷 익스플로러 11 사용
③ 취약점을 이용해 파워쉘을 실행한 후 윈도우 운영체제에 등록된 계정을 확인하는 공격 코드를 작성하였다. 공격대상이 홈페이지에 접속하면 자동으로 파워쉘 명령이 실행된다. 실행되는 과정은 아래와 같이 확인할 수 있다.
④ 피해자가 홈페이지에 접속한 것만으로 공격 명령이 실행되는 것을 확인할 수 있다.
⑤ 브라우저 취약점을 이용하면 악성코드를 다운받거나 원격제어를 하는 등의 악성 행위를 할 수 있다.
3) 인터넷 브라우저 취약점을 이용한 공격 대응 방법
▶ 최신 버전의 인터넷 브라우저를 사용한다.
▶ 소프트웨어 자동 업데이트 기능을 활성화한다.
▶ 운영체제의 자동 업데이트 기능을 활성화한다.
▶ 백신 프로그램의 실시간 감시, 자동 업데이트 기능을 활성화한다.
▶ 수상한 이메일에 포함된 링크를 함부로 클릭하지 않는다.
4. 결론
워터링 홀 공격은 사이버 범죄자들이 자주 사용하는 공격기법이다. 특정 공격대상과 불특정 다수를 노릴 수 있고 주로 알려지지 않은 취약점을 이용하기 때문에 굉장히 위협적이다. 대응하기도 쉽지 않다. 사이버 범죄자가 홈페이지의 취약점을 이용해 악성코드를 숨겨두기 때문에 사용자는 보안패치, 백신 업데이트를 하는 등의 최소한의 보안 조치가 필요하다. 하지만 근본적으로 해결하기 위해서는 소프트웨어를 개발할 때부터 취약점 점검 및 제거하는 노력으로 워터링 홀 공격에 대비해야 한다.
강제적 접근통제 정책에 대한 설명으로 옳지 않은 것은? ①모든 주체와 객체에 보안관리자가 부여한 보안레이블이 부여되며 주체가 객체를 접근할 때 주체와 객체의 보안 레이블을 비교하여 접근허가 여부를 결정한다. ② 미리 정의된 보안규칙들에 의해 접근허가 여부가 판단되므로 임의적 접근통제 정책에 비해 객체에 대한 중앙 집 중적인 접근통제가 가능하다. ③ 강제적 접근통제 정책을 지원하는 대표적 접근통제 모델로는 BLP(Bell-Lapadula), Biba 등이 있다. ④ 강제적 접근통제 정책에 구현하는 대표적 보안 메커니즘으로 Capability List와 ACL(Access Control List) 등 이 있다
접근통제 정책의 구분
1. 임의적 접근통제정책(DAC ; Discretionary Access Control)
2. 강제적 접근통제정책(MAC ; Mandatory Access Control)
3. 역할기반 접근통제정책(RBAC ; Role-based Access Control)
1. 임의적 접근통제정책(DAC)
(1) DAC의 개념
데이터의 소유자(owner)가 접근을 요청하는 사용자의 신분 즉식별자(identity ; ID)에 기초하여 객체에 대해 접근을 제한하는 접근통제 방법이다.
(2) DAC의 특징
① 접근 권한을 객체의 소유자가 임의로 지정하는 자율적 정책이다.
② 허가된 주체에 의하여 변경 가능한 하나의 주체와 객체간의 관계를 정의한다.
③ 접근 통제 목록(ACL; Access Control List)등을 사용한다.
④ 강제적 접근제어 (MAC) 방식을 대체하는 기술은 아니다.
⑤ 오렌지북 C-레벨의 요구사항이다.
⑥ 장 · 단점
ㄱ. 장점 : 융통성이 많아 상업적 용도로 사용된다.
ㄴ. 신분(ID)도용 시 통제 방법이 없다.
(3) DAC의 종류
①Identity-Based DAC: 주체와 객체의 ID(Identity)에 따른 접근통제로 유닉스에서 사용한다.
②User-Directed: 객체를 소유하고 있는 소유자가 접근 권한을 설정 및 변경할 수 있는 접근 통제이다.
2. 강제적 접근통제정책(MAC)
(1) MAC의 개념
강제적인 접근 제한 또는 MAC은 정보시스템 내에서 어떤 주체가 어떤 객체에 접근하려 할 때 양자의보안레이블(보안등급)을 비교하여 높은 보안을 요하는 정보가 낮은 보안수준의 주체에게 노출되지 않도록 접근을 제한하는 접근통제 방법이다.
(2) MAC의 주요 특징
① 접근승인은 보안레벨(level)과 카테고리(category)로 구성되는 보안레이블(Security label)에 의해 제한된다.
② 접근정책은 시스템(system)에 의하여 강제적으로 정의되기 대문에Rule-based 접근통제라고도 한다.
③ 오렌지북 B-레벨의 요구사항으로 DAC보다 안전하다.
④ 장 · 단점
ㄱ. 장점 : 보안이 매우 엄격하여 군대와 같은 민감한 정보의 기밀성을 보장하는데 사용된다.
ㄴ. 단점 : 모든 접근에 대해 보안등급을 정의하고 정책을 확인해야 하기 때문에 개발, 구현이 어렵다.
(3) MAC의 종류
①Rule-based MAC: 주체와 객체의 특성에 관계된 특정 규칙에 따른 접근 통제이다.
②Administratively-directed MAC: 객체에 접근할 수 있는 시스템 관리자에 의한 통제이다.
③CBP(Compartment-Based Policy): 일련의 객체 집합을 다른 객체들과 분리하여 통제이다.
④MLB(Multi-Level Policy): 각 객체별로 지정된 등급만 사용하고, TCSEC(미국방성의 컴퓨터 보안 평가지표)에서 사용되고 있으며 BLP(벨-라파둘라) 수학적 모델로 표현이 가능하다.
3. 역할기반 접근통제정책(RBAC)
(1) RBAC의 개념
주체가 적절한역할(role)에 할당되고 역할에 적합한 접근권한이 할당된 경우만 객체에 접근할 수 있는 비임의적 접근제어(Non DAC) 방식으로 전통적인 DAC와 MAC의 대체 수단으로 사용된다.
(2) RBAC의 주요 특징
① 주체의 역할이나 임무에 따라 객체의 접근 권한을 제어하는 방식이다.
② 조직의 기능 변화나 인사이동에 따른 관리적업무의 효율성을 꾀할 수 있다.
③ 역할에 따라 설정된 권한만 할당하기에 보안 관리를 아주 단순하고 편리하게 할 수 있다.
④ 알 필요성 원칙, 최소권한 원칙, 직무분리 원칙이 지켜진다.
⑤ 금융기관, 정부나 공공기관에서 효과적으로 사용된다.
⑥ 오렌지북 C- 레벨의 요구사항이다.
(3) RBAC의 종류
①Task-based Non DAC: 해당 업무에 해당하는 것만 접근가능하다.
②Latticed-based Non DAC: 역할에 할당된 민감도 레벨에 의해 접근이 결정되고, 관련된 정보로만 접근할 수 있도록 통제된다.
※ 1. Orange Book(미국 국방부 컴퓨터 시스템 평가기준 ; TCSEC)
① 시스템 즉 운영체제에 대한 신뢰 수준을 정의한 문서
② 시스템 보안 평가 기준 중 최초로 수용된 평ㅇ가 기준
③ 네트워크를 고려하지 않은 단일 시스템 보안 평가 기준
접근통제 정책 정리
강제적 MAC
임의적 DAC
역할기반 RBAC
접근권한 부여자
시스템
데이터소유자
Central Authority
접근여부 결정기준
보안 레이블
신분
역할
정책
경직
유연
유연
오렌지 북
B-레벨
C-레벨
C-레벨
장점
안전/중앙집중관리
구현이 용이
다양한 접근권한
단점
구현, 비용, 성능문제
신분위장
X
접근통제 보안모델
(1) 개요
보안모델이란 조직에서 보안 정책을 실제로 구현하기 위한이론적 모델로 수학적 검증을 통과한 모델이다. 수학적 모델이란 명백하고, 실행가능하고, 쉽게 이해하고, 보안정책의 반영이 용이한 장점이 있다.
운영체제에서 접근 통제(Access Control)은 디렉터리나 파일, 네트워크 소켓 같은 시스템 자원을 적절한 권한을 가진 사용자나 그룹이 접근하고 사용할 수 있게 통제하는 것을 의미합니다.
접근 통제에서는 시스템 자원을 객체(Object)라고 하며 자원에 접근하는 사용자나 프로세스는 주체(Subject)라고 정의합니다.
즉 /etc/passwd 파일은 객체이고 이 파일에 접근해서 암호를 변경하는 passwd 라는 명령어는 주체이며 아파치 웹 서버의 설정 파일인 /etc/httpd/conf/httpd.conf는 객체이며 웹 서버 프로그램인/sbin/httpd는 주체가 됩니다.
임의 접근 통제(DAC)
임의 접근 통제(DAC;Discretionary Access Control)는 시스템 객체에 대한 접근을 사용자나 또는 그룹의 신분을 기준으로 제한하는 방법입니다.
사용자나 그룹이 객체의 소유자라면 다른 주체에 대해 이 객체에 대한 접근 권한을 설정할 수 있습니다.
여기서 임의적이라는 말은 소유자는 자신의 판단에 의해서 권한을 줄 수 있다는 의미이며 구현이 용이하고 사용이 간편하기 때문에 전통적으로 유닉스나 윈도우등 대부분의 운영체제의 기본 접근 통제 모델로 사용되고 있습니다.
임의적 접근 통제는 사용자가 임의로 접근 권한을 지정하므로 사용자의 권한을 탈취당하면 사용자가 소유하고 있는 모든 객체의 접근 권한을 가질 수 있게 되는 치명적인 문제가 있습니다.
특히 root 계정은 모든 권한을 갖고 있으므로 root 권한을 탈취하면 시스템을 완벽하게 장악할 수 있으며 권한 탈취시 많이 사용되는 것은 아래에서 설명할 유닉스의 구조적인 2가지 보안 취약점입니다.
setuid/setgid 문제
사용자들의 암호는 /etc/shadow 에 저장되어 있으며 루트만 읽고 쓸수 있습니다.
하지만 사용자들은 passwd 명령어를 실행하여 자신의 암호를 변경할 수 있고 이때 /etc/shadow 파일이 수정됩니다.
상대방 호스트가 동작하는지 확인하기 위해 사용하는 ping 은 ICMP(Internet Control Message Protocol) 패킷을 사용하므로 루트 권한이 필요하지만 일반 사용자도 ping 명령어를 사용하여 상대 호스트의 이상 여부를 확인할 수 있습니다.
유닉스 계열의 운영 체제는 실행 파일의 속성에 setuid(setuser ID upon execution)또는 setgid(setgroup ID upon execution) 비트라는 것을 설정할 수 있으며 이 비트가 설정되어 있을 경우 해당 프로그램을 실행하면 실행 시점에 설정된 사용자(setuid), 또는 그룹(setgid) 권한으로 동작합니다.
이를 확인해 보기 위해 대표적인 setuid 비트가 붙은 프로그램인ping과passwd 의 권한을 확인해 봅시다.
잘 알려진 포트(well-known port) 는 특정한 쓰임새를 위해서 "인터넷 할당 번호 관리기관"(IANA; Internet Assigned Numbers Authority)에서 할당한 TCP 및 UDP 포트 번호들의 일부로 1024 미만의 포트 번호를 사용하고 있습니다.
예로 웹에 사용되는 http(80), 메일 전송에 사용되는 smtp(25), 파일 전송에 사용되는 ftp(20, 21) 등이 잘 알려진 포트입니다.
전통적으로 잘 알려진 포트는 루트만이 사용할 수 있으므로 데몬 서비스는 모두 루트의 권한으로 기동됩니다.
보안 문제는 여기에서 발생하며 루트로 구동되었으므로 만약 서비스 데몬이 보안 취약점이 있거나 잘못된 설정이 있을 경우 서비스 데몬을 통해서 공격자는 루트 권한을 획득하게 될 위험이 있으며 이때문에 웹 서버등은 구동한 후에 자식 프로세스를 생성(fork 시스템 콜)한 후에 쉘이 없는 사용자 계정으로 전환해서 동작하고 있습니다.
예로 아파치 웹 서버(User/Group 지시자)와 nginx(user 지시자)는 아래와 같이 구동할 사용자를 지정하고 있습니다.
## 아파치 웹 서버 User apache Group apache ## nginx user nginx;
위와 같이 사용자 전환을 하지만 부모 프로세스는 계속 루트로 구동되어 있으므로 1024 미만의 포트를 사용하는 데몬 프로세스에 대한 보안 대책이 필요하게 됩니다.
그러나 1024 미만의 포트를 일반 사용자가 쓸 수 있게 하거나 root 가 아닌 별도의 계정에게만 허용하는 것은 전통적인 유닉스의 동작 방식에 어긋나며 커널 수정이나 기타 유틸리티의 대폭 수정이 필요하며 운영자의 혼란을 유발하므로 좋은 방법이 아닙니다.
강제 접근 통제(MAC)
강제 접근 통제(MAC; Mandatory Access Control)는 미리 정해진 정책과 보안 등급에 의거하여 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교하여 접근을 통제하는 모델입니다.
높은 보안을 요구하는 정보는 낮은 보안 수준의 주체가 접근할 수 없으며 소유자라고 할 지라도 정책에 어긋나면 객체에 접근할 수 없으므로 강력한 보안을 제공합니다.
MAC 정책에서는 루트로 구동한 http 서버라도 접근 가능한 파일과 포트가 제한됩니다. 즉 취약점을 이용하여 httpd 의 권한을 획득했어도 /var/www/html, /etc/httpd 등의 사전에 허용한 폴더에만 접근 가능하며 80, 443, 8080 등 웹 서버에 사전에 허용된 포트만 접근이 허용되므로 ssh로 다른 서버로 접근을 시도하는등 해킹으로 인한 이차 피해가 최소화 됩니다.
단점으로는 구현이 복잡하고 어려우며 모든 주체와 객체에 대해서 보안 등급과 허용 등급을 부여하여야 하므로 설정이 복잡하고 시스템 관리자가 접근 통제 모델에 대해 잘 이해하고 있어야 합니다.
FTP는File Transfer Protocol의 약자로 말그대로 파일을 전송하는 통신 규약입니다. FTP 서버에 파일들을 업로드, 다운로드할 수 있도록 해주는 프로토콜이며, 이는 FTP 서버와 FTP 클라이언트 간에 통신에서 이루어집니다.
FTP는Active 모드와 Passive 모드라는 2개의 모드가 존재하며 각각의 모드에서는 2개 또는 2개 이상의 포트가 연결을 맺고 데이터를 전송하는데 사용됩니다. 사용되는 포트는 연결을 제어하는Command 포트가 있으며 데이터를 전송하는DATA 포트가 있습니다.
FTP는 TCP 기반으로 만들어져 있으며 기본으로 동작 모드로 Active 모드를 사용하며 20번 또는 1024번 이후의 데이터(Data) 포트는 데이터를 전송하는데 사용하게 되고, 21번 포트는 접속시에 사용되는 명령(Command )포트입니다.
Active 모드
FTP Active 모드의 동작 방식을 그림으로 보면 아래와 같습니다. 참고로 아래 사용된 명령(Command) 포트와 데이터(Data) 포트는 서버의 설정에서 임의로 수정하여 사용할 수 있습니다.
1) 클라이언트는 서버의 21번 포트로 접속한 후에 자신이 사용할 두 번째 포트를 서버에 미리 알려줍니다.
2) 서버는 클라이언트의 요청에 응답합니다. (acks)
3) 서버의 20번 데이터 포트는 클라이언트가 알려준 두 번째 포트로의 접속을 시도합니다.
4) 클라이언트가 서버의 요청에 응답합니다. (acks)
위 과정에서 액티브 모드는“클라이언트가 서버에 접속을 하는 것이 아닌 서버가 클라이언트에 접속을 하는 것”을 확인할 수 있습니다. 만일 FTP 클라이언트에 방화벽이 설치되어 있는 등 외부에서의 접속을 허용하지 않는 상황이라면 FTP 접속이 정상적으로 이루어지지 않을 것입니다. 접소기 되더라도 데이터 목록을 받아오지 못하게 되는 경우도 있고요.
Passive 모드
위에서 살펴본 Active 모드의 단점을 해결하기 위한 Passive 모드를 살펴봅시다. 역시나 아래 그림에서 사용된 커맨드 포트와 데이터 포트는 서버 설정에서 변경할 수 있습니다. 특히 Passive 모드에서는 데이터 포트 번호를 특별하게 지정하지 않는 경우1024 ~ 65535번중에서 사용 가능한 임의 포트를 사용하게 됩니다. 포트 번호를 지정할 때는 10001 ~ 10005번과 같이 범위를 지정할 수도 있습니다.
1) 클라이언트가 커맨드 포트로 접속을 시도합니다. (Passive 모드 연결)
2) 서버에서는 사용할 두 번째 포트를 클라이언트에게 알려줍니다.
3) 클라이언트는 다른 포트를 열어 서버가 알려준 포트로 접속을 시도합니다.
4) 서버가 클라이언트의 요청에 응답합니다. (acks)
Passive 모드에서는 앞선 Active 모드에서 사용했던 20번 포트를 사용하지 않고 1024번 이후의 임의의 포트를 데이터 채널 포트로 사용하게 됩니다.
연결 방식에 따른 주의사항
Active Mode의 경우는 클라이언트 측의 방화벽에 20번 포트가 차단되어 있다면, 데이터 채널 연결이 불가능해집니다. 연결은 되더라도 데이터 조회부터 실패되는 경우가 발생할 수 있습니다. 따라서 서버측은 20번 포트는아웃바운드(OUTBOUND, 내 서버에서 외부서버로 보내는 요청) 허용, 클라이언트는인바운드(INBOUND, 외부에서 내 서버로 들어오는 요청) 허용이 방화벽 설정에 필요합니다.
Passive Mode의 경우는 서버 측의 데이터 채널 포트가 막혀있는 경우 데이터 채널 연결이 불가능하게 됩니다. 그리고 앞서 소개한 것처럼 데이터 채널 포트의 범위를 지정할 수 있는데, 별도로 지정하지 않는 경우는 1024 ~ 65535번의 포트를 사용하게 됩니다. 따라서 INBOUND 모두 허용이 필요하게 되는데, 서버 측에서 데이터 채널 포트 범위를 지정하여 특정 범위의 포트만 허용해주면 모든 포트 허용의 문제를 어느 정도 해결할 수 있습니다.
HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜입니다. 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송합니다. 이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점을 알아보겠습니다.
GET
HTTP/1.1 스펙인RFC2616의 Section9.3에 따르면 GET은서버로부터 정보를 조회하기 위해설계된 메소드입니다. GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송합니다. URL의 끝에?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부릅니다. 만약, 요청 파라미터가 여러 개이면&로 연결합니다. 쿼리스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있습니다.
쿼리스트링을 포함한 URL의 샘플은 아래와 같습니다. 여기서 요청 파라미터명은 name1, name2이고, 각각의 파라미터는 value1, value2라는 값으로 서버에 요청을 보내게 됩니다.
그리고 GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있습니다. js, css, 이미지 같은 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없습니다. 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용합니다. 그래서 프론트엔드 개발을 하다보면 정적 컨텐츠가 캐시돼 컨텐츠를 변경해도 내용이 바뀌지 않는 경우가 종종 발생합니다. 이 때는 브라우저의 캐시를 지워주면 다시 컨텐츠를 조회하기 위해 서버로 요청을 보내게 됩니다.
POST
POST는리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송합니다. HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있습니다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있습니다. 이처럼 POST는 데이터가 Body로 전송되고 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 합니다.
그리고 POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 합니다. 데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추합니다. 만약, 알 수 없는 경우에는application/octet-stream로 요청을 처리합니다.
GET과 POST의 차이
GET은 Idempotent, POST는 Non-idempotent하게 설계되었습니다. Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있습니다.
수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
즉, 멱등이라는 것은동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 합니다. 여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미합니다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에주로 조회를 할 때에 사용해야합니다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 됩니다.
반대로 POST는 Non-idempotent하기 때문에서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있습니다.
GET과 POST는 이처럼 큰 차이가 있기 때문에 설계원칙에 따라 적절한 용도로 사용해야합니다.
다음 설명에 해당하는 서비스거부(DoS) 공격은? 1 [보기] 헤더가 조작된 일련의 IP 패킷조각(IP Fregments)들을 전송함으로써 공격이 이루어지며 공격자는 데이터의 일부가 겹치거다. 일부 데이터를 포함하지 않는 패킷 조각들을 전송함으로써 패 킷 재조합 시 공격대상에서 부하를 발생시키는 공격 유형이다. ① Teardrop ② Land attack ③ Syn Flooding ④ Smurf attack
티어드롭 공격, Teardrop Attack
서비스 거부 공격(DOS)의 하나. 공격 대상 컴퓨터에 헤더가 조작된 일련의 IP 패킷 조각(IP fragments)들을 전송함으로써 컴퓨터의 OS를 다운시키는 공격이다. 주로 MS 윈도나 리눅스 2.0.32와 2.1.63 이전 버전의 OS에 영향을 준다.
랜드 공격, Local Area Network Denial Attack, LAND Attack
공격자가 패킷의 출발지 주소(Address)나 포트(port)를 임의로 변경하여 출발지와 목적지 주소(또는 포트)를 동일하게 함으로써, 공격 대상 컴퓨터의 실행 속도를 느리게 하거나 동작을 마비시켜서비스 거부상태에 빠지도록 하는 공격 방법. 수신되는 패킷 중 출발지 주소(또는 포트)와 목적지 주소(또는 포트)가 동일한 패킷들을 차단함으로써 이 공격을 피할 수 있다.
신 플러딩 공격, SYN Flooding Attack
Client가 Server로 SYN패킷을 보내면 Server는 SYK/ACK를 보내고 해당 connection을 backlog Queue에 넣어준다.
이 Backlog Queue가 더 꽉차서 더 이상 새로운 connection을 형성을 못하는 경우를 SYN Flooding 이라고 하고 이러한 공격을 SYN Flooding Attack 이라고 한다.
스머프 공격, smurf attack
인터넷 프로토콜(IP) 브로드캐스트나 기타 인터넷 운용 측면을 이용하여 인터넷 망을 공격하는 행위.
‘스머핑’이라는 프로그램을 사용하여 네트워크를 공격하는데, 스머핑은 IP와 인터넷 제어 메시지 프로토콜(ICMP)의 특성을 이용한다고 알려져 있다. ICMP는 원래 네트워크 노드와 관리자들이 네트워크의 정보를 교환하기 위해 사용되는 프로토콜로서 운용 중인 노드들이 있는지 보기 위해 핑(ping) 명령을 사용하여 현재 동작 중인 노드가 에코 메시지를 보내게 한다. 스머핑 프로그램은 마치 다른 네트워크 주소(이것을 스머핑 주소라 함)로부터 생성된 것처럼 보이는 네트워크 패킷을 만들어 주어진 네트워크 내의 모든 IP 주소들, 즉 IP 브로드캐스트 주소로 ICMP 핑 메시지를 보낸다. 이 핑 메시지에 대한 응답은 스머핑 주소로 보내지는데, 엄청난 양의 핑과 그에 대응한 에코 메시지로 인해 네트워크는 실시간 트래픽을 처리할 수 없을 만큼 많은 정보로 넘쳐 흐르게 된다.
스머핑 공격을 무력화시키는 방법은 각 네트워크 라우터에서 IP브로드캐스트 주소를 사용할 수 없게 미리 설정해 놓는 것이다.
포트 스캔(port scan)은 운영 중인 서버에서 열려 있는 포트를 검색하는 것을 의미한다.
[목적]
자신의 서버의 네트워크 서비스들을 점검하기 위해 사용하거나 해커가 해킹을 하기 위해 정보 수집에서 타겟 서버의 정보를 수집하기 위해 사용한다. 알고자하는 패킷에 특정한 패킷을 보냈을 때 돌아오는 응답에 따라 포트가 열려있는지 닫혀있는지 판단한다.
[유형]
TCP
TCP half-open
UDP
Stealth
TCP
TCP 스캔은 TCP 처음 연결 시 일어나는 3-웨이 핸드쉐이킹을 탐지하는 기법이다. 만약 핸드쉐이킹이 정상적으로 완료되었다면, 해당 TCP 포트는 정상적으로 열려 있는 것으로 판단할 수 있다. 서비스 거부 공격을 막기 위해, 포트 스캐너는 핸드쉐이킹 직후 연결을 종료한다. 이 방식은 일반적인 소켓 connect()를 이용하기 때문에, Nmap 등의 프로그램에서는 이 방식을 연결 스캔(connect scan)으로 부른다.
[시도 및 응답]
열려있는 경우 : SYN + ACK
닫혀있는 경우 : RST + ACK
[그림1] 열려있는 경우
[그림2] 닫혀있는 경우
[알려진 포트]
1. 포트 80(HTTP) : 이 포트는 우리가 발견한 열린 포트의 14% 이상을 차지한다.
2. 포트 23(Telnet) : 텔넷은(암호화되지 않아) 보안이 불안하긴 하지만 계속 존재했다.
3. 포트 443(HTTPS) : SSL 암호화된 웹서버는 이 포트를 기본적으로 사용한다.
4. 포트 21(FTP) : 텔넷처럼 FTP는 없어져야 하는 보안이 불안한 프로토콜이다.
5. 포트 22(SSH) : 텔넷을 대체하는 암호화된 프로토콜로 보통 보안 셸로 알려졌다.
6. 포트 25(SMTP) : 표준 메일 전송 프로토콜(보안이 돼 있지 않다).
7. 포트 3389(ms-term-server) : 마이크로소프트 터미널 서비스 관리 포트
8. 포트 110(POP3) : 이메일 추출을 위한 포스트 오피스 프로토콜 버전 3(비보안)
9. 포트 445(마이크로소프트-DS) : (파일/프린터 공유 같은)마이크로소프트 윈도우 서비스에 있는 IP에 대한 SMB 통신을 위한 포트
10. 포트 143(IMAP) : 인터넷 메시지 접근 프로토콜 버전 2. 보안이 안 된 이메일 추출 프로토콜
11. 포트 53(도메인) : 도메인 네임 시스템DNS, 호스트/도메인명과 IP주소 사이의 대화를 위한 보안이 안 된 시스템
12. 포트 3306(MySQL) : MySQL 데이터베이스와 통신을 위한 포트
13. 포트 8080(HTTP-proxy) : 일반적인 웹서버를 위한 HTTP 프록시나 다른 포트로써 흔하게 사용되는 포트
14. 포트 995(POP3S) : 보안을 위해 추가된 SSL이 있는 POP3
15. 포트 5900(VNC) : 그래픽 데스크탑 공유 시스템(비보안)
TCP half-open
half-open 스캔은 TCP 핸드쉐이킹을 완전히 수행하지 않고, 처음 SYN 패킷만을 받은 후 검사를 완료하는 방식이다. 이 방식은 실제 TCP 연결이 일어나지 않는다. 이 방식을 사용하기 위해서는 TCP 스캔과 같이 connect() 함수를 이용할 수 없고, 포트 스캐너는 이 스캔 작업을 위해 TCP 패킷을 직접 생성한다.
[시도 및 응답]
열려있는 경우 : SYN + RST 패킷을 받은 후 응답하지 않는다.
닫혀있는 경우 : SYN + ACK 패킷을 받은 후 RST 패킷을 보내 연결을 끊는다.
* FIN를 보냈을 때
- 열려있는 경우 : 응답없음
- 닫혀있는 경우 : RST + ACK
* SYN+ACK를 보냈을 때
- 열려있는 경우 : RST
- 닫혀있는 경우 : RST
[그림1] 열려있는 경우
[그림2] 닫혀있는 경우
UDP
UDP 프로토콜은 TCP와 다르게 핸드쉐이킹 과정이 존재하지 않고, 따라서 일반적으로는 포트가 열려 있다고 하더라도 서버에서 아무런 응답을 하지 않을 수도 있다. 하지만, 많은 시스템에서는 보낸 패킷에 대한 응답이 없을 때 ICMP unreachable 메시지를 보낸다. 많은 UDP 스캐너는 이 메시지를 탐지하는 방향으로 동작한다. 이 방식은 서버에서 ICMP 메시지를 보내지 않는 경우 닫혀 있는 포트를 열려 있다고 판단하는 경우가 존재한다.
다른 방식으로는 각 포트에 따라서 그에 대응하는 프로토콜 패킷을 전송하는 방식이다. 예를 들어, DNS 서버는 53번 포트에서 동작하며, UDP 스캐너는 해당 포트에 DNS 정보 요청 패킷을 보낸 후 응답을 받는 방식이다. 이러한 방식은 잘 알려진 포트와 대응 프로토콜에 대해서만 사용할 수 있다는 한계가 있지만, ICMP 메시지가 없는 경우 활용할 수 있다.
[시도 및 응답]
열려있는 경우 : 응답없음
닫혀있는 경우 : icmp destination unreachable
[알려진 포트]
1. 포트 631(IPP) : 인터넷 프린팅 프로토콜
2. 포트 161(SNMP) : 간단한 네트워크 관리 프로토콜
3. 포트 123(NTP) : 네트워크 타임 프로토콜
4. 포트 1434(MS-SQL-DS) : 마이크로소프트 SQL 서버
5. 포트 67(DHCPS) : 다이내믹 호스트 구성 프로토콜 서버
6. 포트 53(도메인) : 도메인 네임 시스템DNS 서버
7. 포트 68(DHCPC) : DHCP 클라이언트 포트
8. 포트 520(라우트) : 라우팅 정보 프로토콜RIP
9. 포트 69(TFTP) : 간단한 파일 전송 프로토콜
Stealth
세션을 완전히 성립하지 않고, 공격 대상 시스템의 포트 활성화 여부를 알아내기 때문에 공격 대상 시스템에 로그가 남지 않는다. 따라서 공격 대상의 시스템 관리자는 어떤 IP를 가진 공격자가 자신의 시스템을 스캔 했는지 확인 할 수 없다. 스텔스 스캔은 닫혀있는 포트에 대해서만 응답하고 종류는 ACK, NULL, X-MAS스캔 등이 있다.
[유형]
ACK or FIN : ack 혹은 FIN flag만 보내는 스캔
NULL : flag를 하나도 보내지 않는 스캔
X-MAS : 모든 flag를 보내거나 FIN, PSH, URG flag를 보내는 스캔
[시도 및 응답]
열려있는 경우 : 응답없음
닫혀있는 경우 : RST
[그림1] ACK, FIN 열려있는 경우
[그림2] ACK, FIN 닫혀있는 경우
[그림3] X-MAS 닫혀있는 경우
NMAP
[목적]
nmap은 원래 Gordon Lyon에 의해 쓰인 보안 스캐너이다. 컴퓨터와 서비스를 찾기 위해 사용된다. Nmap은 서비스 탐지 프로토콜로 자신을 광고하지 않는 수동적인 서비스들도 찾아낼 수 있다. 게다가 Nmap은 원격 컴퓨터들의 상세정보도 알아낼 수 있다. 이 상세정보에는 OS, 장치 종류, 운영 시간, 서비스에 쓰이는 소프트웨어 제품과 버전, 방화벽 기술 존재와 LAN에서 NIC의 공급자 정보도 포함한다.
[특징]
호스트 탐지 : 네트워크 상에서 컴퓨터들을 확인한다. 예를 들어 ping 응답이나 특정포트가 열린 컴퓨터들을 나열한다.
포트 스캔 : 하나 혹은 그 이상의 대상 컴퓨터들에 열린 포트들을 나열한다.
버전 탐지 : 응용프로그램의 이름과 버전 번호를 확인하기 위해 원격 컴퓨터의 서비스를 확인 한다.
OS 탐지 : 원격으로 OS와 네트워크 장치의 하드웨어 특성을 확인 한다.
[설치 및 사용 방법]
#> yum install nmap
#> nmap [Scan Type] [Option] [Address]
[옵션]
옵션
설명
-sT
일반적인 TCP 포트스캐닝
-sS
half-open 스캔
-sP
ping 을 이용한 일반적인 스캔
-sU
UDP 포트 스캐닝
-PO
대상 호스트에 대한 ping 응답을 요청하지 않음, log 기록과 filtering 을 피할 수 있음
-PT
일반적이 ICMP ping이 아닌 ACK 패킷으로 ping 을 보내고 RST 패킷으로 응답을 받음
add chain=input action=drop comment="Drop new connections from blacklisted IP's to this router" \ connection-state=new src-address-list=blacklist in-interface=ether1-WAN ---------------------------------------------------------------------------------------------------------------------------------- SpamHaus "Spamhaus Do n't Route Or Peer List (DROP)" "
# Script which will download the drop list as a text file /system script add name="DownloadSpamhaus" source={ /tool fetch url="http://joshaven.com/spamhaus.rsc" mode=http; :log info "Downloaded spamhaus.rsc from Joshaven.com"; }
# Script which will Remove old Spamhaus list and add new one /system script add name="ReplaceSpamhaus" source={ /ip firewall address-list remove [find where comment="SpamHaus"] /import file-name=spamhaus.rsc; :log info "Removed old Spamhaus records and imported new list"; }
# Schedule the download and application of the spamhaus list /system scheduler add comment="Download spamnaus list" interval=3d \ name="DownloadSpamhausList" on-event=DownloadSpamhaus \ start-date=jan/01/1970 start-time=02:57:54 /system scheduler add comment="Apply spamnaus List" interval=3d \ name="InstallSpamhausList" on-event=ReplaceSpamhaus \ start-date=jan/01/1970 start-time=03:02:54
---------------------------------------------------------------------------------------------------------------------------------- dshield “This list summarizes the top 20 attacking class C (/24) subnets over the last three days. The number of ‘attacks’ indicates the number of targets reporting scans from this subnet.”
# Script which will download the drop list as a text file /system script add name="Download_dshield" source={ /tool fetch url="http://joshaven.com/dshield.rsc" mode=http; :log info "Downloaded dshield.rsc from Joshaven.com"; }
# Script which will Remove old dshield list and add new one /system script add name="Replace_dshield" source={ /ip firewall address-list remove [find where comment="DShield"] /import file-name=dshield.rsc; :log info "Removed old dshield records and imported new list"; }
# Schedule the download and application of the dshield list /system scheduler add comment="Download dshield list" interval=3d \ name="DownloadDShieldList" on-event=Download_dshield \ start-date=jan/01/1970 start-time=03:07:54 /system scheduler add comment="Apply dshield List" interval=3d \ name="InstallDShieldList" on-event=Replace_dshield \ start-date=jan/01/1970 start-time=03:12:54
---------------------------------------------------------------------------------------------------------------------------------- malc0de "The files below will be updated daily with domains that have been indentified distributing malware during the past 30 days"
# Script which will download the malc0de list as a text file /system script add name="Download_malc0de" source={ /tool fetch url="http://joshaven.com/malc0de.rsc" mode=http; :log info "Downloaded malc0de.rsc from Joshaven.com"; }
# Script which will Remove old malc0de list and add new one /system script add name="Replace_malc0de" source={ /ip firewall address-list remove [find where comment="malc0de"] /import file-name=malc0de.rsc; :log info "Removed old malc0de records and imported new list"; }
# Schedule the download and application of the malc0de list /system scheduler add comment="Download malc0de list" interval=3d \ name="Downloadmalc0deList" on-event=Download_malc0de \ start-date=jan/01/1970 start-time=03:07:54 /system scheduler add comment="Apply malc0de List" interval=3d \ name="Installmalc0deList" on-event=Replace_malc0de \ start-date=jan/01/1970 start-time=03:12:54
---------------------------------------------------------------------------------------------------------------------------------- VoIP Blacklist "Protect your business and PBX's against VoIP Fraud Minimize the risks of attacks on your Telephony Server Save bandwidth by using Geolocation filtering."
WARNING: Use carefully! This is a huge list which can quickly cause performance issues.
# Script which will download the voip-bl list as a text file /system script add name="Download_voip-bl" source={ /tool fetch url="http://joshaven.com/voip-bl.rsc" mode=http; :log info "Downloaded voip-bl.rsc from Joshaven.com"; }
# Script which will Remove old voip-bl list and add new one /system script add name="Replace_voip-bl" source={ /ip firewall address-list remove [find where comment="VoIP BL"] /import file-name=voip-bl.rsc; :log info "Removed old voip-bl records and imported new list"; }
# Schedule the download and application of the voip-bl list /system scheduler add comment="Download voip-bl list" interval=3d \ name="Refresh_voip-bl" on-event=Download_voip-bl \ start-date=jan/01/1970 start-time=03:07:54 /system scheduler add comment="Apply voip-bl List" interval=3d \ name="Update_voip-bl" on-event=Replace_voip-bl \ start-date=jan/01/1970 start-time=03:12:54
/ip firewall service-port set ftp disabled=yes set tftp disabled=yes set irc disabled=yes set h323 disabled=yes set udplite disabled=yes set dccp disabled=yes set sctp disabled=yes # 라우터OS에서 사용하는 서비스 포트입니다. winbox 이외에는 다 막았습니다. #
/ip service set telnet disabled=yes set ftp disabled=yes set www disabled=yes set ssh disabled=yes set api disabled=yes set api-ssl disabled=yes # 라우터의 시간설정 및 시간동기화 설정을 합니다.#
/system clock set time-zone-name=Asia/Seoul /system ntp client set enabled=yes primary-ntp=203.254.163.74 # 어찌보면 대단히 중요합니다. 라우터OS 관리용 접근제어인데, 위의 방화벽단에서 막는 것은 L3/L4 에서 막는 설정이기에 #
# 여전히 L2 (맥주소) 기반 접근은 가능한 상태이므로 반드시 외부로부터 오는 접근은 막아야합니다. #
# 맥 텔넷과 맥 winbox를 무선(eth6)/외부(ether1)로부터 접근을 막습니다. 만약 방화벽에서 ether1 인터페이스를 막으면 #