우리는 스파이 첩보 영화에서 주인공이 자신을 노출시키지 않기 위해 남의 신분으로 위장하는 경우를 자주 볼 수 있다. 이때 주로 사용하는 방법이 주민등록증, 운전면허증 등의 신분증을 위조하거나 신체적인 특징인 얼굴, 지문, 목소리 등을 변조하는 것이다. 이 모든 것들이 특정 사람을 인식하는 방법을 우회 통과하기 위한 방법이다. 

마찬가지로 네트워크 상에서도 악의적인 혹은 비밀스러운 활동을 시도하려는 사람들은 먼저 자기 자신을 감추는 방법을 생각하게 된다. 다만 네트워크 상에서 해당 사용자(혹은 해당 호스트)를 식별하는 정보는 IP 주소, DNS 이름, Mac 주소, 이메일 주소 등을 사용한다. 

스푸핑 공격(Spoofing Attack)은 바로 자기 자신의 식별 정보를 속여 다른 대상 시스템을 공격하는 기법이다. 네트워크 상의 공격자는 TCP/IP 프로토콜 상의 취약성을 기반으로 해킹 시도시 자신의 시스템 정보(IP 주소, DNS 이름, Mac 주소 등)를 위장하여 감춤으로써 역추적이 어렵게 만든다. 이러한 스푸핑 공격은 패킷 스니퍼링이나 서비스 거부 공격, 세션 하이재킹(Session Hijacking) 등의 다른 여러가지 공격을 수행 가능하게 한다. 

이번 회에서는 스푸핑 공격의 종류를 알아보고, 해당 공격이 어떤 것인지 간략하게 알아보도록 하겠다. 스푸핑 공격의 종류를 알아보면 다음과 같다. 어떤 정보를 속이느냐에 따라 세분화될 수 있다. 

스푸핑 공격의 종류 

① IP 스푸핑 

IP 스푸핑은 말 그대로 IP 정보를 속여서 다른 시스템을 공격하는 것이다. IP 스푸핑을 통해 서비스 거부 공격(TCP Syn flooding, UDP flooding, ICMP flooding)을 수행할 수도 있으며, 공격대상 컴퓨터와 서버 사이의 연결된 세션에 대해서 세션 끊기도 가능하다. TCP/IP 상의 프로토콜 취약성은 1985년 Robert T. Morris의 논문 “A Weakness in the 4.2 BSD Unix TCP/IP Software”에 업급이 되었으며, 특히 희대의 해커 케빈미트닉은 실제 해킹에서 IP 스푸핑 공격을 통해 모토롤러, 선마이크로시스템즈, NEC, 노벨 등의 컴퓨터 전산망에 침투, 소프트웨어 및 각종 자료 등을 훔친 혐의로 1995년 체포되었다. 

케빈 미트닉은 정확하게는 TCP Syn flooding + TCP 순서 번호 예측(TCP Sequence Nubmer Guessing) 

+ IP 스푸핑을 사용하였다. 이는 클라이언트와 서버와의 통신 사이에 해커 컴퓨터가 끼어들어 클라이언트를 TCP Syn flooding 서비스 거부 공격으로 전혀 반응하지 못하게 한 후, 해커가 이 클라이언트인 것으로 가장하여 서버와 통신하는 기법이다. 이러한 공격은 TCP/IP 프로토콜의 문제점인 TCP 순서 번호 생성이 매초당 일정하게 증가한다는 것과 호스트에 대한 인증시 IP의 소스 주소만을 사용한다는 것으로 인하여 가능하였다. 

순서 번호는 연결 지향형 프로토콜인 TCP 프로토콜에서 두 호스트 간의 패킷 전달이 손실 없이 이루어졌는지 체크하기 위한 일종의 패킷 번호표이다. 해커는 일단 클라이언트를 TCP Syn flooding 공격으로 봉쇄한다. 이후 서버의 순서번호를 예측하여 IP 스푸핑된 위조 패킷을 발송함으로써 서버를 속여 침투하는 것이다. IP 기반의 인증만을 제공하는 Unix의 rlogin, rsh 등의 r 계열 서비스들은 이러한 IP 스푸핑 공격에 취약할 수 밖에 없다. 


② APR 스푸핑 

ARP 프로토콜은 32bit IP 주소를 48bit의 네트워크 카드 주소(Mac Address)로 대응시켜 주는 프로토콜이다. 우리가 실제로 IP 주소를 통해 네트워크 연결을 시도하면 TCP/IP에서는 해당 IP에 해당하는 네트워크 카드 주소를 찾아 연결하게 된다. 이러한 IP 주소와 네트워크 카드 주소의 대응 테이블은 스위치나 기타 네트워크 장비 및 사용자 컴퓨터에서 arp cache 테이블이라는 곳에 위치하게 된다. 

해커가 이 테이블 상의 정보를 위조하게 되면 공격 대상 컴퓨터와 서버 사이의 트래픽을 해커 자신의 컴퓨터로 우회시킬 수 있다. 우회된 트래픽으로부터 해커는 패스워드 정보 등 유용한 정보를 마음껏 획득할 수 있다. 


③ 이메일 스푸핑 

이메일 발송시 송신자의 주소를 위조하는 것이다. 간단한 방법으로는 이메일 송신자 From 필드에 별칭(alias) 필드를 사용할 수 있다. 이메일 발송시 별칭을 설정한 경우에는 별칭 주소로 이메일이 발송된다. 이러한 경우 메일을 받아보는 사람은 실제 이메일 송신자가 아닌 별칭 필드만을 확인하는 경우에는 이메일의 송신자가 별칭 필드에서 온 것으로 알게 된다. 

요즘 들어서 극성인 대량의 스팸 메일과 바이러스 감염 메일은 송신자의 주소가 아예 존재하지 않는 이메일 주소를 사용한다. 또한 이메일을 발송한 메일 서버 또한 직접적인 메일 발송 서버가 아닌 중계 서버이므로 메일을 발송한 자를 추적하기란 쉽지 않다. 


④ DNS 스푸핑 

DNS 프로토콜은 인터넷 연결시 도메인 주소를 실제 IP 주소로 대응시켜 주는 프로토콜이다. 인터넷 연결시 사용하는 DNS 서버가 IP 주소를 찾아달라는 요청을 받았을 때, 자기 자신의 도메인이 아닌 주소에 대해서는 보다 상위 단의 DNS 서버로부터 재귀적(recursive)인 방식으로 IP 주소를 찾아 알려준다. 

만약 해커가 어떤 도메인의 DNS 컴퓨터를 장악하여 통제하고 있다면 최종적으로 얻어진 IP 주소는 원래 사용자가 찾아가고자 하였던 홈페이지가 아닌 다른 홈페이지로 연결되게 된다. 이는 요청을 발송했던 DNS와 응답을 주는 DNS 사이의 트래픽을 해커가 스니퍼링함으로써 Query ID라는 값을 통해 해커의 사이트 IP를 최종 응답으로 넘겨주도록 하는 것이다. 

사용자가 쇼핑몰을 이용하고자 하였다면 해커에 의해 조작된 홈페이지 내에서 자신의 아이디와 필드, 신용 카드 정보를 기입함으로써 개인 정보를 탈취당할 수 있다. 위와 같은 스푸핑 공격들은 실제로 인터넷 상의 툴로써 공개가 되어 있으며 여러가지 다른 복합적인 공격과 같이 사용될 수 있다. 

그러나 각각의 공격 방법에 있어서 제약 및 전제 사항이 있으므로 모두 완벽하게 성공되지는 않는다. 스푸핑 공격은 패킷 필터링 접근 제어와 IP 인증 기반 접근제어, 취약점 서비스 사용의 제거, 암호화 프로토콜의 사용을 통해서 방어가 가능하다. 인터넷 상에 떠돌아다니는 정보는 항상 안전한 것이 아니므로 스푸핑 공격과 같은 것을 통해 언제라도 위조되었을 가능성도 있을 수 있음을 간과해서는 안되겠다.

'Security' 카테고리의 다른 글

Kerberos  (0) 2017.01.08
DES/3DES/AES  (0) 2017.01.08
icmp flood 서버단에서 예방하기  (0) 2017.01.08
해킹, 바이러스 감염 시 대응 요령  (0) 2017.01.08
암호학  (0) 2017.01.08

ping 을 이용한 DOS 공격 막는 방법을 적어 보자. kernel 에서 ping의
응답 즉, ICMP ECHO 를 on을 시키느냐 off 를 시키느냐에 따라 ping이
되느냐 안 되느냐이다. 보통 ping 을 막는 방법으로 많이 나오는 방법
은 kernel의 icmp_echo_ignore_all 값을 1로 만들어 주는 방법이 주로
알려져 있다.

하지만 kernel document 에 들어 있는 문서를 자세히 보면 ping 을 이
용한 dos 공격은 broadcast와 multicast service 의 패킷을 넘치게 하
는 공격인 것이다.

즉 ping을 다 막을 필요는 없고 broadcast 와 multicast 쪽의 ping 만
막으면 되는 것이다. 아래는 kernel 문서의 원문이다.

icmp_echo_ignore_all and icmp_echo_ignore_broadcasts

Turn on (1) or off (0), if the kernel should ignore all ICMP ECHO
requests, or just those to broadcast and multicast addresses.
Please note that if you accept ICMP echo requests with a
broadcast/multicast destination address your network may be used
as an exploder for denial of service packet flooding attacks to
other hosts.

만약 모든 ICMP ECHO 요청을 커널이 무시하게 하거나, ICMP ECHO 요청
중 broadcast 와 multicast 주소에만 무시하게 할때 1의 값은 무시, 0
의 값은 return 을 하게 된다. 만약 boardcast/multicast 주소의 ICMP
ECHO 요청을 수용하게 한다면, network 가 다른 호스트로 denial of
service(DOS) packet flooding 공격을 하는데 이용이 될수가 있다.

즉 icmp_echo_ignore_all 의 모든 값을 1로 할 필요는 없다는 것이다.
즉 ping 이라는 것은 내가 외부에서 나의 host 가 살아 있는지의 판단
여부도 되기 때문이다. 그러므로

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

을 이용하는 것 보다는

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

를 이용하는 것이 더욱 낳다. 부팅시 마다 적용을 시키고 싶다면
rc.local 에 위의 내용을 넣어 주도록 한다.

RedHat 6.2 버젼 이상의 사용자들은 sysctl 을 kernel 값을 관리 할수
있다. 일단 /etc/sysctl.conf 에 다음의 값을 넣는다.

net.ipv4.icmp_echo_ignore_broadcasts = 1

파일을 저장한 후에 sysctl -w 명령을 실행하고 나서

sysctl -a | grep ignore_boradcasts

명령을 실행하면 값이 변경이 되었는지 확인을 할수가 있다. 다음 부터
는 부팅시 /etc/sysctl.conf 의 값이 적용이 된다.

'Security' 카테고리의 다른 글

DES/3DES/AES  (0) 2017.01.08
스푸핑  (0) 2017.01.08
해킹, 바이러스 감염 시 대응 요령  (0) 2017.01.08
암호학  (0) 2017.01.08
사용자 인증  (0) 2017.01.08

1) 바이러스 감염이 의심되는 현상


①시스템을 부팅할 때 시스템 관련 파일을 찾을 수 없다고 에러메시지가 나오고 윈도우즈가 실행되지 않을 경우 
②이유 없이 프로그램 실행속도가 저하되고 시스템이 자주 다운될 경우 
③PC 이용중 비정상적인 그림, 메시지, 소리 등이 나타날 경우 
④사용자 의사와 관계없이 프로그램이 실행되거나 주변장치가 스스로 움직일 경우 
⑤알 수 없는 파일이 생길 경우, 특히 웜은 공유폴더를 이용한다. 

 

메신저 사용 안할때 끄기 포트가 열려 있어 공격 될수있다.

P2P eDonkey2000, 프루나,  사용 안할때 꺼놓는다.

1일에 1번 스파이 악성코드 발견시 제거, 스파이웨어 freeware도 치료 가능하지만

신종악성코드 치료가 불가능하다  안철수 SPYZERO 2.0 추천한다. 정품을 사서 설치해도

아깝지 않다.

 

인터넷 뱅크 할때  공인증확인서  하드 디스크 안에  저장을 하는데 메우 위험하다

USB 메모리 이동디스크 에서 저장 해서 인터넷뱅크을 하면 도욱 안전하다.

 

방어벽이 설치 되어 있으면 더욱 안전하다. ZoneAlarm PRO 추천한다.

여기자료실에서 받을수 있다.

 

 


A.해커 다른 PC에 대한 공격을 막기 위해 네트워크를 차단한다. 네트워크를 차단하는 방법은 컴퓨터 후면에 네트웍카드(NIC)로 연결된 선을 뽑아주면 된다. 

그 다음 V3에서 SCAN 하십시요 

A. 패스워드 보안 (꼭 필요한 작업)  초보자 (주의) 
모든 계정에 안전한 패스워드 사용 
취약한 패스워드는 패스워드 추측 공격에 약하기 때문에 패스워드는 알파벳과 특수문자를 포함한 8자 이상의 복잡한 패스워드를 사용하고, 최소 1일에서 
최대 42일의 주기로 패스워드를 변경하는 것이 바람직하다. 

A-1. 공유 제한 (꼭 필요한 작업) 
불필요한 공유폴더의 제거 
불필요한 공유폴더는 인터넷 웜의 침입을 허용할 수 있으며, 자료유출의 통로가 되므로 삭제한다. 


B.Windows 최신 패치 설치 
Windows 시스템과 Explorer, Outlook, RPC 등의 Windows 응용프로그램에는 버그들이 존재하며, 이러한 버그들은 해킹공격에서 이용될 수 있으므로 최신 패치가 나오면 항상 업데이트하도록 한다. 

악성 프로그램은 일반적으로 제작자가 의도적으로 사용자에게 피해를 주고자 만든 프로그램으로써 컴퓨터 바이러스, 웜, 트로이목마등으로 분류한다. 

1.바이러스: 자기 복제 능력을 가지며 감염 대상 코드의 실행 구조를 변경하거나 내부 구조를 변경하여 대상 코드의 수행 전후에 바이러스가 실행될 수 있도록 변경하는 코드들의 집합을 가진다. 바이러스의 부작용은 메시지 출력, CMOS 메모리 데이터 삭제로부터 하드디스크 정보 파괴, 플래시메모리 정보 파괴 등으로 피해 규모가 커지고 있다. 

2.웜: 실행 코드 자체로 번식하는 유형을 말하며 주로 PC상에서 실행되는 것을 의미한다. 웜과 바이러스의 큰 차이점은 감염 대상을 가지고 있는가에 따라 구분된다. 바이러스는 감염 대상을 가지고 있지만 웜은 감염 대상을 가지지 않는다. 

3.트로이목마: 바이러스와 달리 자기 복제 능력이 없으며 악의의 기능을 가지는 코드를 유틸리티 프로그램에 내장하여 배포하거나, 그 자체를 유틸리티 프로그램으로 위장해 배포되며, 특정한 환경이나 조건 혹은 배포자의 의도에 따라서 사용자의 정보 유출이나 자료 파괴와 같은 피해를 준다. 

이러한 악성 프로그램은 최근에는 잘 발달된 네트웍을 이용하여, 웜 형태로 공유폴더, E-mail, MSN을 이용하여 전파하고, 다른 파일을 감염시키기도 하며, 시스템의 취약점을 이용하는 해킹기술을 접목하는 방향으로 발전하고 있다. 피해 시스템 자신도 모르는 사이에 또 다른 가해자가 될 수도 있다는 것이다. 이러한 악성 프로그램을 예방하기 위해서는 백신 제품을 설치하고, 올바르게 설정하여 
사용하는 것이 무엇보다 중요하다. 다음과 같은 방법으로 백신제품을 설정하고 사용하도록 한다. 


4.백신의 주기적인 업데이트 
새로운 컴퓨터 바이러스는 계속해서 만들어지고, 유포되고 있다. 이에 대응하여 백신회사는 일주일을 주기로 이러한 새로운 바이러스에 대해서 백신을 업데이트하고 있다. 또한 신속하게 확산되고 있는 바이러스가 신고되면, 긴급업데이트를 실행한다. 따라서 백신 프로그램을 다음과 같이 주기적으로 업데이트 하도록 설정해야 하며, 위험한 바이러스가 출현한 경우, 즉시 업데이트를 실행하는 것이 필요하다. 

netstat -na 

5.네트워크 스캔 대상 포트 

FTP 21 
Kerberos 88 
Imap 143 
Telnet 23 
Linuxconf 98 
Sendmail 25 
NetBIOS 137,139, 
DNS 관련 53 
RPC 111,635,32771,32772,32773 
117 
POP 109 
(POP2,8), 110 
(POP3, 53) 61 

백도어/트로이잔 1243(Sub7) 12 
12345(NetBus) 34 
1524(ingreslock) 6 
2222(eggdrop) 11 
Sscan 23/110/111/31337/2766/5/7/600/1524/2222 90 
기타 1/2/3/4/5/… 16

 

 방화벽을 이용한 P2P 프로그램 차단 

P2P 프로그램은 대부분 사용하는 Port가 지정되어 있다. 최근에 나오는 프로그램들은 Port를 변경할 수 있거나, 동적으로 할당되어 쓰이긴 하지만, 기본적으로 사용되는 포트를 차단하는 것만으로도 많은 도움이 될 것이다. 

그리고 중앙에서 사용자 인증을 위해 쓰이는 서버 IP를 차단하는 방법으로도 해당 P2P 프로그램의 사용을 막을 수 있다. 

다음 표는 각 P2P 프로그램이 사용하고 있는 포트를 정리해 놓은 것이다. 이를 활용하여 방화벽에서 P2P에서 사용되고 있는 포트를 차단할 것을 권고한다. 


[참고1] P2P 프로그램이 사용하는 네트워크 포트 

서비스명프로토콜포트
eDonkeyTCP4661
4662
4642
UDP4672
4665
iMashTCP5000
BitTorrentTCP6881
6889
소리바다 V.2UDP22321
7674
7675
WINMXTCP6699
UDP6257
Direct-ConnectTCP411-412
UDP411-412
KaZaATCP1214
Guntella-MorpheusTCP6346-6347
UDP6346-6347
GuRuGuRuTCP9292
8282
31200
파일 구리TCP9493
Madster-AimsterTCP23172
9922
HotLineTCP5497
5498
5500-5503
UDP5499
V-ShareTCP8404
ManiacTCP2000
UDP2010
TCP2222
MiRCTCP6667
6665-6670
7000
ShareshareTCP6399
UDP6777
BlusterUDP41170
GoToMyPcTCP8200
NapsterTCP6600-6699
4444
5555
6666
7777
8888
8875



[참고2] 메신저 프로그램 사용 포트 

서비스명서버포트설명
MSN64.4.130.0/24
207.46.104.0/24
207.46.106.0/24
207.46.107.0/24
207.46.108.0/24
207.46.110.0/24
TCP 1863 ,801863접속 시도 후 차단 되면 80 접속 시도
TCP 6891-6900파일 전송
UDP 6901음성채팅
UDP1863,5190Microsoft Network Messenger
  
Yahoo216.136.233.152/32
216.136.233.153/32
216.136.175.144/32
216.136.224.143/32
66.163.173.203/32
216.136.233.133/32
216.136.233.148/32
66.163.173.201/32
216.136.224.213/32
TCP 5050,51015050 접속 시도 후 차단 되어 있으면 Port 계속 변경
  
TCP 5000-5001음성채팅
  
  
TCP 5100화상채팅
  
  
Nate On203.226.253.75/32
203.226.253.135/32
203.226.253.82/32
TCP 5004-5010기본 포트 5004-5010 접속 시도후 차단되어 있으면 Port를 계속 변경
TCP80,83,7003웹 컨텐츠 및 문자 보내기
Daum211.233.29.78/32TCP 8062 
SayClub211.233.47.20/32  
AOL TCP 5190AOL Instant Messenger Also used by: ICQ
UDP 4000ICQ_locator
Dreamwize211.39.128.236/32
211.39.128.184/32
TCP 10000 
버디버디 TCP 810 
TCP 940 
TCP 950 
케이친구 TCP 7979 
천리안 TCP 1420 
TCP4949, 8989파일 송수신
ICQ TCP 5190 
UIN TCP 8080 
Genile TCP 10000 



'Security' 카테고리의 다른 글

스푸핑  (0) 2017.01.08
icmp flood 서버단에서 예방하기  (0) 2017.01.08
암호학  (0) 2017.01.08
사용자 인증  (0) 2017.01.08
FTP Active/Passive 정리  (0) 2017.01.06

1. 암호화 시스템의 핵심 요소는 암호화 알고리즘, 암호화 키 그리고 암호화 키의 길이 이다.

2. DES는 개인키를 사용하여 데이터를 암호화하는 대칭키 암호알고리즘이다. DES는 각 64비트 데이터 블록에 56비트 길이의 키를 적용한다. 이 과정은 여러 가지 모드에서 실행될 수 있으며, 16번의 연산이 수반된다. DES에는 72,000,000,000,000,000 (72천 조)개 이상의 암호키 사용이 가능하다. 주어진 각 메시지의 암호를 위한 키는 이렇 게 막대한 양의 키 중에서 무작위로 선택된다. 다른 개인키 암호화 방법과 마찬가지 로 송신자와 수신자 둘 모두는 동일한 개인키를 알고 사용해야만 한다.

DES는 1977년에 IBM에서 발명하였으며, 미국 국방부에 의해 채택되어, ANSI X3.92와 X3.106 표준 및 미국 연방정부 FIPS 46과 81 표준에 정의되어 있다. 이 암호화 알고 리즘이 비우호적인 국가에 의해 사용될 수 있다는 염려 때문에 미국 정부는 암호화 소프트웨어의 수출을 막고 있다.

3. Diffie-Hellman 알고리즘은 비밀키(Secret-Key)를 공유(키 교환)하는 과정에서 특정 
공격에 취약할 가능성이 존재한다. 다음 중 Diffie-Hellman 알고리즘에 가장 취약한 
공격이라 할 수 있는 것은

 

4. 서버와 사용자간에 상호인증이 이루어지면 안전한 통신 채널이 생성되지만, 중재자 공격으로 통신 채널에서 전송되는 데이터를 가로챌 수 있다. 중재자 공격은 프로토 콜 수행의 흐름을 조작하여 수행하는 공격 방법이다. 예를 들어 프로토콜 시작 단계 에서 B는 C에게 A로 가장하여 접속을 하고, A로부터 받은 데이터를 이용하여 C에게 접속을 한다. 그렇게 되면 C는 A가 접속을 했다고 생각하지만, 실제로는 B가 접속한 것이다. 이와 같이 중재자 공격은 통신 중간에서 다른 사람인척 위장을 하여 공격하 는 방법이다.

 

5. 아래의 각 암호 방식 중 암호화의 강도가 가장 높은 것은 혼합 암호(Product cipher) 이다.

o 전치 암호(Transposition Cipher) - 글자를 바꾸지 않고 놓인 위치를 변경하는 방 법으로 ‘Permutation Cipher‘라 부르기도 한다.
o 대치 암호(Substitution Cipher) - 각각의 글자를 다른 글자에 대응시키는 방법 
o 혼합 암호(Product Cipher) - 대치 암호와 전치 암호를 같이 사용

 

6. 암호화와 복호화를 동일한 키를 사용하는 암호화 방식을 대칭키/비밀키/관용키 암호 화 방식이라고 한다. 암호화와 복호화 시 서로 다른 키를 사용하는 방식은 공개키/비 대칭키 암호화 방식이라 한다. 

 

  ▪ 블록 암호 알고리즘
             -64비트 : DES, 3DES, DESX, RC5, BLOWFISH, CAST128, IDEA, SAFER , RC2 등
             -128비트 : SEED, CRYPTON, CAST256, RC6, TWOFISH, RIJNDAEL, MARS, SERPENT 등

  ▪ 스트림암호 알고리즘 : RC4, SEAL 등
  ▪ 해쉬 함수 : MD5, SHA1, SHA256, SHA384, SHA512, RMD128, RMD160, RMD256, 
                 RMD320, HAS160, TIGER 등

8. 블록 암호화 알고리즘의 운영모드에 대한 설명이다.

-ECB: 평문 블록은 각각 독립적으로 암호화되어 암호문 블록을 생성한다.
-CFB: 독립적으로 움직이는 sequence data 블록 S가 존재하여 각각의 평문 블록은 이 전의 S(i-         l)를 암호화한 S(i)와 XOR되어 암호문 블록을 생성한다.
-OFB: 이전의 암호문 블록은 Output되는 동시에 암호화되어 현재의 평문과 XOR된 후 에 암호문         블록을 생성한다.

  

9. 비대칭키 암호방식과 대칭키 암호방식을 비교한 것이다.

구분

비대칭키 암호방식(Asymmetric-key)

대칭키 암호방식(Symmetric-key)

키의 상호관계

암호화키 ≠ 복호화키

암호화키 = 복호화키

암호화키

공개

비밀

복호화키

비밀

비밀

암호알고리즘

공개

비밀 또는 공개

대표적 알고리즘

RSA

Vernam/DES

비밀키 전송

불필요

필요

키 개수

2n (비밀보관, 자신의 비밀키)

n(n-1)/2 (비밀보관, 통신상대자 수)

안전한 인증

용이

곤란

암호화 속도

저속

고속

경제성

낮음

높음

전자서명

간단하게 구현

복잡(추가적인 구현 필요)

 

10. 대칭키 또는 공개키 암호화에서 사용되는 키 관리에 대한 기술

o Key Establishment Protocol- 대칭키 암호화 또는 공개키 암호화에 사용되는 키 전 송 메커니즘으로 shared secret를 보안 목적으로 사용자 A, B(또는 다자간에)가 이용 할 수 있도록 해주는 기술

0 Key Transport Protocol - 사용자 A가 secret value를 사용자 B에게 비밀리에 전해 주는 키 설정 기술

o Key Agreement Protocol - shared secret를 사용자 A, B가 분배된 정보를 용하 여 얻는 키 설정  기술

11.은닉 서명(Blind Signature)은 기본적으로 임의의 전자서명을 만들 수 있는 서명자 와 서명 받을 메시지를 사용하는 사용자로 구성되어 있는 서명 방식으로, 사용자의 신원과 (메시지, 서명)쌍을 연결시킬 수 없는 특성을 유지할 수 있는 서명이다. 전자 화폐의 가치를 증명해주기 위하여 화폐 발급자가 사용자의 정보를 볼 수 없는 상태에 서 서명을 해줄 수 있게 하는 새로운 서명 방식이다.

서명자가 자신이 서명하는 메시지를 알 수 없는 형식으로 봉투 내의 내용을 보지 않 고 겉면에 서명을 하면 내부의 잉크에 의해 서류에 서명이 되는 원리를 이용하는 방 식

12. 전자화폐 프로토콜의 주요 요구사항은 양도 가능성, 이동성 그리고 익명성(불추적성) 이며, 그 외 분할이용 가능성, 간편성, 안전성 그리고 위조 불가능 등의 요구 사항 을 만족하여야 한다.

 

o비밀 공유는 비밀을 여러 조각으로 나누어 비밀을 관리하려 할 때 비밀을 분배하는 시점에서 나누어진 비밀 조각 각각이 원래 비밀의 일부임을 확인할 수 있는 방법을 제공한다(허위 또는 조작된 비밀 조각이 아니라는 것을 증명).

o은닉 서명은 내용은 보여주지 않고 서명을 받기 위해 사용되며 주로 전자 화폐를 발 급할 때 돈이 누구에게 발급되었는지 알 수 없도록 하기 위해서 사용된다.

 o영지식 증명은 어떠한 사실은 알고 있는 경우 사실에 대한 정보는 전혀 주지 않으면 서 자신이 그 사실을 알고 있다는 것을 증명하는 방법으로 네트워크 상에 흘러 다니 는 정보의 양을 0(zero)에 가깝게 만드는 방법으로 활용된다.

 o동전 던지기는 일방향 해쉬 함수를 이용하여 상대방의 부정을 확인할 수 있도록 하 며 도박성이 있는 인터넷 포커 고스톱에 응용할 수 있다.

 

13. 이중 서명(Dual Signature)은 거래자의 익명성을 보호하기 위하여 사용자의 지불정보 를 상점에 숨기고, 주문정보는 지불게이트웨이(PG)에게 숨기기 위하여 전자 지불 시 스템에서 사용하는 전자서명 방식이다.

구매자는 구매요청정보과 지불정보에 대한 해쉬값을 각각 구하고 그 두개의 해쉬값 을 묶은 값에 대해 또 한 번 해쉬한 뒤, 그 값을 서명함으로써 구매요청정보와 지불 정보를 서로 연관시켜주는 방법이다. 구매자는 마지막으로 이 최종 해쉬값과 지불정 보의 해쉬값, 구매요청정보의 해쉬값에 대해 한 번 더 서명한 후에 상인에게 전달한 다. 상인은 이 정보들로부터 구매요청정보를 복구하여 볼 수 있지만 지불정보를 보진 못 한다. 단지 두 정보 간의 연관성만을 확인할 수 있다. 마찬가지로 지불게이트웨이는 지불정보는 복구하여 볼 수 있지만 구매요청정보는 볼 수 없으며 단지 두 정보 간의 연관성만을 확인할 수 있다.

14. 은닉 서명은 사용자의 익명성과 송신자의 익명성을 보장함으로써 기밀성 보장을 가능 하게 하는 특수 전자서명이다. 사용자의 익명성은 직접 서명한 사용자가 서명발급 이 후에 전자서명(메시지와 서명의 쌍)의 유효성을 확인할 수 있으나, 자신이 언제 누구 에게 발행했는지는 확인할 수 없도록 하며, 송신자의 익명성은 검증자가 전자서명 내 역(메시지와 서명의 쌍)의 유효성을 확인할 수 있으나, 송신자의 신분을 확인할 수 없도록 하여 송신자의 익명성을 보장한다

 

15. 전자투표 프로토콜의 요구사항에 대한 설명

▪ 완전성(Verifiability): 모든 유효투표가 정확하게 집계되어야 하며, 최종 집계에서 정당한 투표가 제거되지 않아야 한다.

▪ 건전성(Soundness): 부정한 투표자에 의해 정당한 투표인의 투표가 방해되지 않아야 한다

▪ 기밀성(Privacy): 투표의 결과로부터 투표자의 신분을 확인할 수 없어야 한다(투표자의 익명성 보장).

 

▪ 단일성 또는 이중투표 불가성(Un-reusability): 정당한 투표자가 두 번 이상 투표에 참여할 수 없어야 한다. 즉 한번만 투표할 수 있어야 한다.

▪ 검증성(Verifiability)은 투표 결과를 속일 수 없도록 누구라도 투표 결과를 검증할 수 있어야 한다는 속성이다. 또 한 추가적으로 아래와 같은 사항이 요구된다.

▪ 적임성 또는 선거권(Eligibility): 투표 권한을 가진 자만이 투표할 수 있어야 한 다.

▪ 공정성(Fairness): 투표의 중간결과가 투표에 영향을 주지 않아야 한다. 전자투표 를 위한 암호 응용 프로토콜의 요구사항은 7가지이다.

16. 인증서를 이용한 공개키의 효율적인 분배 방법을 정의하기 위하여, ITU에서 인증서 에 대한 기본 형식과 데이터 형식을 정의한 규격이 X.509이다.

17. X.509는 전자 인증인 발생인과 수령인을 구별하고 단지 루트 CA만 자신의 승인한 인 증을 발행하게 된다

18. 전자서명이 제공하는 보안 항목은 다음과 같다.

             ▪ 기밀성(Confidentiality) 
             ▪ 무결성(Integrity) 
             ▪ 인증(Authentication) 
             ▪ 부인방지(Non-repudiation)

19. 암호키 복구 기술은 크게 키 위탁 방식과 캡슐화 방식 및 제 3 기관 방식으로 나눌 수 있다.

20. PKI 시스템을 구성하는 요소로는 인증서를 발행하고 취소하는 인증기관(CA : Certification Authority), 인증서 등록 및 사용자 신원 확인을 대행하는 등록기관 (RA : Registration Authority), 인증서 및 인증서 취소 목록을 저장하고 사용자에 게 서비스하는 디렉터리(Directory), 그리고 인증서를 신청하고 인증서를 사용하는 사용자(User)로 분류될 수 있다.

21. PMI(Privilege Management Infrastructure, 권한관리 기반구조)는 기업 단위에서 특 정 데이터 접근 권한을 차별적으로 부여해주기 위한 것으로, 특히 기업 외부망 접근 까지 관리할 수 있어 PKI(공개키 기반구조)를 보완하는 새로운 보안 인프라로 각광 받고 있다.

 

22. DRM이란 전자 서적(e-book), 음악, 비디오, 게임, 소프트웨어, 증권 정보 그리고 이 미지 등의 각종 디지털 컨텐츠를 안전하게 보호하기 위한 것으로, 보호된 컨텐츠를 사용함으로써 저작권 소유 당사자에게 발생하는 이익을 관리하여 주는 상품과 서비스 를 말한다.

23. 메시지의 인증은 메시지 내용의 불법 감청 방지(기밀성), 메시지의 변형 여부 탐지 (무결성) 그리고 송신자의 송신 입증(부인방지)을 목적으로 한다.

24. 전자서명은 공개키 암호화방식을 이용하여, 전송되는 메시지의 특정 데이터를 자신 의 개인키로 암호화해서(서명해서) 수신측에 보내고, 수신측은 송신측의 공개키로 복 호화하여 정상적으로 메시지를 해독함으로써, 전송되는 메시지의 기밀성, 무결성, (그리고) 부인방지(서명)를 보장하기 위한 암호기술이다.

25. PMI는 AC(Attribute Certificate)의 발급, 저장, 유통을 제어하는 권한관리 기반구조 로, PKI(공개키 기반구조)와 유사한 형태이다. PKI와 PMI의 구성요소의 비교는 다음 과 같다.

26. 키 분배 센터(KDC)는 통신하는 양측이 키를 서로 공유하지 않고 키 분배 센터와 별 도의 키를 공유함으로써, 키 정보의 보안 및 관리를 위한 메커니즘이다. 키 분배 센 터는 키 분배 센터는 자신과 키를 공유하는 객체에게 키를 생성 혹은 취득, 분해하 는 신뢰할 수 있는 별도의 키를 생성하여 공유한다. 인증기관(CA)에서의 키는 인증과 동시에 인증기관에서 등록되며, X.500 디렉터리 시 스템에 사용자 별로 등록되어 배포된다. 인증기관과 키 분배 센터의 차이점은 키를 처리하는 타입에서 가장 큰 차이가 있다.

27. KMI는 암호용 인증서의 안전한 관리 및 발급을 위한 기반 구조로 PKI의 단점(키와 인 증서의 복구 기능)을 보완하여 전자민원행정 서비스에 주로 사용되고 있다.

 

28. PKI의 구성요소는 PAA, PCA, CA, ORA 등으로 구성된다.

▪ PAA(Policy Approving Authority) - 전체 PKI 시스템 내에서 수행되는 정책 설정을 담당한다.
▪ PCA(Policy Certification Authority) - PAA에서 승인된 전반적인 정책을 확장하거 나, 세부화된 정책을 생성한다. 
▪ CA(Certification Authority) - 사용자에게 인증서를 발급하고 다른 CA와의 상호인 증을 담당한다.
▪ ORA(Organization Registration Authority) - 사용자와 CA의 중간 위치에서 사용자 의 인증서 요구를 받고 사용자 신분(인증)을 확인한 후, CA에게 인증서 발급 요청을 한다.

29. 인증서 취소 목록의 내용설명 -최근수정일, 발급자의 서명, 취소이유, 인증기관의 서명, 인증기관의 서명 알고리즘

30. 다음은 PKI 구성 객체 및 구성객체의 기능에 대한 설명이다.

31. 다음은 각 용어에 대한 설명이다.

▪ OCSP(Online Certificate Status Protocol) : IETF 표준화 추진 중 Verisign에서 제 안한 프로토콜로서 실시간으로 인증서의 상태를 확인할 수 있는 클라이언트-서버 모 델의 온라인 메커니즘이다.

▪ IETF의 PKIX: 인터넷 기반의 X.509 인증서를 이용한 PKI 구현에 필요한 항목들을 표 준화한 내용이다.

▪ RSA의 PKCS: PKI 동작을 위한 기본적인 암호 서비스 및 프리미티브들을 정의한 모델 이다.

▪ X.509: X.500 디렉터리에 대한 인증서비스를 기술하는 규약이다

32. 전자서명의 특징

부인방지는 송신자가 메시지를 생성하거나 전송한 사실을 부인할 수 없도록 하는 특성이다. 인증은 신뢰할 수 있는 송신자가 메 시지를 전송하였다는 것을 보장해주는 특성이다. 데이터 무결성은 수신자가 원문 메 시지에 수정을 가하지 못하도록 하기 위해 수정을 하였을 경우 해쉬값이 달라져 원문 의 수정을 식별할 수 있도록 하는 특성이다.

33. 전자서명이 안전하고 유효하기 위해서는 다음과 같은 조건/특성을 만족해야 한다.

▪서명자 인증(user authentication) 조건은 전자서명의 서명자를 누구든지 검증할 수 있어야 한다는 특성이다.
▪부인방지(non-repudiation) 조건은 서명자는 후에 서명한 사실을 부인할 수 없어야 한다는 특성이다. 
▪변경불가(unalterable) 조건은 서명한 문서의 내용을 변경할 수 없어야 한다는 특성 이다.
▪재사용불가(not reusable) 조건은 문서의 서명을 다른 문서의 서명으로 다시 사용 할 수 없어야 한다는 특성이다.
▪위조불가(un-forgeable) 조건은 합법적인 서명자만이 전자서명을 생성할 수 있어야 한다는 특성이다.

34. 전자서명은 송신자의 신원을 인증하고 전송 메시지의 암호화는 기밀성을 보장하기 위 한 방법이다. 이를 위하여 송신자 인증은 송신자의 개인키로 서명함으로써 송신자의 신원을 보장할 수 있으며, 전송메시지의 기밀성은 수신자의 공개키로 메시지를 암호 화하기 때문에 기밀성이 보장된다

35. 워터마킹은 저작권을 보호하고자 하는 대상 미디어(이미지, 오디오, 동영상)에 저작 권 정보를 담고 있는 로고 이미지나 또는 Copyrights, production date, ID 등의 정 보를 삽입하는 기술이다. 삽입된 워터마킹 데이터는 사용자에게 표시되지 않게 원본 이미지에 포함되며 원본 이미지와 동일한 포맷으로 존재하므로 사용자가 이용 시 어 떠한 제한도 통제되지는 않는다.

36. Kerckhoff 원리: 암호해독자는 현재 사용되고 있는 암호방식을 알고 있다는 것을 전 제로 암호해독을 시도한다는 원리이다

37. 현재 미국표준암호는 Rijndael 이다 . 한국은 SEED이다

38. 시도-응답 개인식별 프로토콜은 공격자가 클라이언트와 서버의 통신을 도청한 후 그 정보를 이용해 클라이언트를 가장하여 개인식별 인증을 받을 수 없다

39. 거래인증은 데이터에 관한 유일성과 시각을 추가로 보증하는 메시지 인증으로 유일성 과 시각보증은 전형적으로 적당한 시간 변수의 사용으로 제공된다

40. 증명가능 비밀분산(VSS)은 Shamir의 비밀분산방식을 영지식 증명과 함께 구성하여 불 확정 전송 프로토콜과 함께 암호프로토콜을 설계하는데 융용하게 사용되는 방식으로 일반적인 개념은 어느 한 당사자만이 알고있는 하나의 비밀정보를 여러조각으로 나누 어 다른 사람들에게 공평하게 분배하여 필요시 이를 재구성하여 사용하는 방법이다.

41. 대화형 프로토콜이 대화형 중명시스템이 되기 위해 필요한 조건은 완전성과 건전성이 다.

42. PGP 에서 사용하는 암호알고리즘은 Triple-DES,IDEA,CAST-128 이다.

'Security' 카테고리의 다른 글

icmp flood 서버단에서 예방하기  (0) 2017.01.08
해킹, 바이러스 감염 시 대응 요령  (0) 2017.01.08
사용자 인증  (0) 2017.01.08
FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
이번시간에는 Iptables사용법과 기본적인 firewall구성법에 대해서 알아보도록 하겠다. 

이제 Iptables를 사용하기 위한 기본적인 설정에 대해서 알아보자. Iptables는 Kernel 2.4.x 기반의 리눅스 설치시에 기본으로 설치되어있고 /sbin 디렉토리 아래에 있다. 그리고 iptables와 ipchains는 동시에 사용할 수 없으므로 우선 ipchains의 모듈을 내려줘야 한다. 

아래의 그림처럼 lsmod를 해보고 만약 ipchains 모듈이 올라와 있다면 rmmod ipchains 명령으로 모듈을 내려줘야 iptables 사용이 가능하다. 


이제 Iptables에 대해서 본격적으로 알아보도록 하자. 

기본적으로 Iptables에는 세가지 chain이 있고 모든 패킷은 이 세가지 chain중 하나를 통과하게 된다. 이 세가지 chain은 INPUT, OUTPUT, FORWARD chain인데 우선 여러분의 컴퓨터로 들어가는 모든 패킷은 INPUT chain을 통과한다. 그리고 여러분의 컴퓨터에서 나가는 모든 패킷은 OUTPUT chain을 통과한다. 그리고 하나의 네트워크에서 다른 곳으로 보내는 모든 패킷은 FORWARD chain을 통과한다.


Iptables가 작동하는 방식은 이들 각각의 INPUT, OUTPUT, FORWARD chain에 당신이 어떠한 rule을 세우는 지에 따라 달라진다. 
예를 들어 당신이 HTML 페이지를 요청하기 위해 www.yahoo.com에 패킷을 보낸다면 이 패킷은 우선 당신 컴퓨터의 OUTPUT chain을 통과하게 된다. 
그러면 kernel에서 OUTPUT chain의 rule을 확인하고 rule과 match가 되는지 확인을 하게된다. rule중에서 최초로 match되는 것에 의해 당신이 보낸 패킷의 운명이 결정되는 것이다. 
만약 어떤 rule과도 match되지 않는다면 전체 chain의 정책이 ACCEPT냐 DROP이냐에 따라 패킷의 운명이 결정될 것이다. 그러고 나서 Yahoo! 에서 응답하는 패킷은 당신의 INPUT chain을 통과하게 될 것이다. 

IP 주소 막기 

이제 기초적인 개념에 대해서 알아봤으니 실제로 사용해 보도록 하겠다. 

Iptable을 사용할 때에는 기억해야 할 많은 옵션들이 있으므로 man 페이지(man iptables)를 잘 활용하는 것이 중요하다. 이제 특정 IP를 조종하는 법에 대해서 알아보자. 우선 당신이 200.200.200.1 이라는 IP로부터 오는 모든 패킷을 막고 싶어한다고 가정하자. 우선 -s 옵션이 사용되는데 여기에서 source IP나 DNS name을 지칭할 수 있다. 그러므로 다음과 같이 함으로써 이 IP를 지칭할 수 있다. 


./iptables -s 200.200.200.1 


하지만 위처럼만 명령을 내리면 kernel은 위의 주소에서 오는 패킷을 어떻게 처리해야 할 지를 알 수가 없다. 그러므로 -j 옵션으로 그 패킷을 어떻게 처리해야 하는지 결정해야 한다. 일반적으로 3가지 옵션이 있는데 ACCEPT, DENY, DROP이다. 

ACCEPT는 대충 예상할 수 있듯이 패킷을 허용하는 옵션이다. DENY 옵션은 컴퓨터가 연결을 허용하지 않는다고 메시지를 돌려 보내는 옵션이다. 그리고 DROP 옵션은 패킷을 완전히 무시해 버린다. 만약 우리가 이 IP에 대해 확실히 의심이 간다면 우리는 DENY 대신에 DROP을 사용해야 할 것이다. 
그러므로 결과적으론 다음과같이 옵션을 주면 된다. 


./iptables -s 200.200.200.1 -j DROP 


하지만 이 명령만으로는 아직 컴퓨터가 명령을 이해할 수가 없다. 우리는 한가지를 더 추가해야 되는데 바로 어떤 chain의 rule로 적용시킬지 결정해야 하는 것이다. 
여러분은 -A 옵션을 사용해서 이를 결정할 수 있다. 즉 아까 위에서 본 INPUT, OUTPUT, FORWARD 옵션 중에서 하나를 선택해야 하는 것이다. 이 옵션을 줌으로써 당신이 선택한 chain의 맨 아래부분에 새로운 rule이 추가될 것이다. 
따라서 우리는 우리에게 들어오는 패킷을 차단하고 싶으므로 INPUT 옵션을 주면 되는 것이다. 그러므로 전체 명령은 다음과 같다. 


./iptables -A INPUT -s 200.200.200.1 -j DROP 



이 한 줄의 명령으로 200.200.200.1로부터 오는 모든 패킷을 무시할 수 있다. 옵션의 순서는 바뀌어도 상관이 없다. 즉 -j DROP이 -s 200.200.200.1 보다 앞에 가도 상관이 없다. 만약 그 반대로 200.200.200.1로 패킷이 못가도록 하려면 INPUT 대신에 OUTPUT을, -s 대신에 -d(destination) 옵션을 주면된다.

 

  • Service 차단하기


  • 만약 우리가 해당 컴퓨터로부터 telnet 요청만 무시하고싶다면 어떻게 해야 하는가? 이것도 그다지 어렵지 않다. 일단 큰 범주로 나누어 봤을 때 적어도 3가지의 프로토콜 - TCP, UDP, ICMP - 가 있다. 다른 대부분의 서비스와 마찬가지로 telnet은 TCP 프로토콜로 작동한다. -p 옵션으로 우리는 프로토콜을 결정할 수 있다. 하지만 TCP라고만 옵션을 줘서는 컴퓨터가 인식하지를 못한다. telnet은 TCP프로토콜로 작동하는 특정 서비스에 불과하기 때문이다. 우선 우리가 프로토콜을 TCP로 설정한 다음에는 --destination-port 옵션으로 해당하는 port를 설정해 줘야한다. 
    우선 telnet의 포트번호는 23번이다. 포트번호 대신에 telnet이라 써도 상관없다. 
    여기서 source port 와 destination port를 혼동하면 안된다. 즉 클라이언트는 어떤 포트로도 작동할 수 있는 반면에 서버는 23번 포트로 작동하기 때문이다. 즉 특정 서비스를 차단하기 위해서는 -destination-port를 이용하면 되고, 그 반대는 -source-port를 이용하면 된다. 이제 이들 옵션을 합쳐서 아래와 같이 명령을 주면 된다. 

    ./iptables –A INPUT –s 200.200.200.1 –p tcp --destination-port telnet –j DROP 


    그리고 IP의 영역을 선택하고 싶다면 200.200.200.0/24 와 같이 설정하면 된다. 이것은 200.200.200.* 에 해당하는 모든 IP를 선택하는 것과 같다. 

    선택적인 차단 

    이제 좀더 심화된 내용에 대해서 알아보자. 우선 여러분의 컴퓨터가 local area network(LAN)에 있고, Internet에 접속 가능하다고 가정한다. 알다시피 LAN은 eth0으로 Internet 연결은 ppp0으로 구분할 수 있다. 이제 다시 다음과 같이 가정해 보자. 우리는 telnet 서비스를 LAN상의 컴퓨터에게는 서비스하고 보안상 Internet상에서는 접근하지 못하도록 하고 싶다. 이것 역시 쉽게 구성할 수 있다. 우리는 input interface에 대해서는 -i 옵션을 output interface에 대해서는 -o 옵션을 사용할 수 있다. 즉 다음처럼 명령을 주면 된다. 

    ./iptables –A INPUT –p tcp --destination-port telnet –i ppp0 –j DROP 



    이렇게 함으로써 우리는 LAN상의 사용자는 telnet을 사용하고 그밖에 Internet상의 사용자는 telnet 을 사용하지 못하도록 할 수 있다. 

    Rule 순서에 관하여 
    이제 다음 단계로 들어가기에 앞서서 rule을 조종하는 다른 방법에 대해서 간단히 알아보자. 
    Iptables의 chain에서는 먼저 등록 된 rule이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 그 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다. 

    –A 옵션을 줌으로써 우리는 새로운 규칙을 chain의 맨 아래에 추가하게 된다. 즉 chain상의 상위 rule이 먼저 작동하기 때문에, 만일 새로 추가하는 rule을 먼저 작동시키기 위해서는 -I 옵션을 줌으로써 새로운 rule을 원하는 위치에 놓을 수 있다. 예를 들어 INPUT chain의 가장 위에 어떤 rule을 놓고 싶다면 “-I INPUT 1” 이라 명령하면 된다. 그리고 다른 위치로 놓고 싶다면 1을 다른 숫자로 바꿔주면 된다. 

    그리고 이미 위치된 rule을 다른 위치로 바꾸고 싶다면 -R 옵션을 주면 된다. -I 옵션을 주는 것과 마찬가지로 사용할 수 있는데 다만 -I옵션을 사용해서 1의 위치에 놓으면 다른 rule들이 밑으로 한칸씩 내려가는 반면 -R옵션을 사용해서 1의 위치에 놓으면 그 위치의 rule은 삭제된다. 

    그리고 끝으로 rule을 삭제하고 싶다면 -D옵션과 숫자를 사용하면 되고, -L 옵션을 사용하면 작성된 모든 rule의 목록을 보여주고, -F 옵션을 주면 해당 chain의 모든 rule을 삭제한다. 그리고 만약 chain을 명시하지 않았다면 모든 것을 flush할 것이다.

     

  • SYN Packets

  • 좀더 심화된 내용에 대해서 알아보자. 우선 패킷들은 특정 프로토콜을 사용한다. 그리고 프로토콜이 TCP라면 역시 특정 port를 사용한다. 그러므로 여러분 컴퓨터의 모든 포트를 막음으로써 보안을 할 수 있을 것이다. 
    하지만 당신이 다른 컴퓨터에 패킷을 보내면 그 컴퓨터는 당신에게 다시 응답을 해야한다. 그러므로 만약 당신에게 들어오는 모든 포트를 막아버린다면 당신에게 응답하는 패킷도 결국 못 들어오므로 connection을 하는 의미가 없을 것이다. 

    하지만 다른 방법이 있다. 두 컴퓨터가 TCP connection으로 패킷을 주고 받는다면 그 connection은 우선 초기화가 되어야 한다. 

    이것은 바로 SYN packet이 담당한다. SYN packet은 단순히 다른 컴퓨터에게 주고 받을 준비가 되었다는 것만 알려주는 초기화 기능만을 한다. 이제 서비스를 요청하는 컴퓨터는 우선적으로 SYN packet을 보낸다는 것을 알게 되었다. 그러므로 들어오는 SYN packet만 막기만 하면 다른 컴퓨터가 당신 컴퓨터의 서비스를 이용하지 못하게 할 수 있고, 하지만 당신은 그들과 통신할 수 있는 것이다. 

    즉 이와 같이 하면 당신이 먼저 패킷을 보내서 요청이 들어오는 것이 아니면 모두 무시해 버리게 된다. 
    이 옵션을 사용하기 위해서는 선택한 프로토콜 뒤에 --syn이라고 명령을 넣으면 된다. 이제 인터넷으로부터 오는 모든 연결을 막기위해서는 다음과 같이 rule을 정하면 된다. 

    ./iptables –A INPUT –i ppp0 –p tcp --syn –j DROP 


    당신이 만약 웹 서비스를 운영하는 것이 아니라면 이것은 유용한 rule이 될 것이다. 

    만약 당신이 웹서비스를 위해 하나의 포트(예를들어 80번-HTTP)만 열어두고 싶다면 역시 한가지 방법이 있다. 
    바로 “!” 마크를 사용하면 되는데 많은 프로그래밍 언어에서처럼 “!”은 “not”을 의미한다. 

    예를들어 80번 포트만 제외하고 모든 SYN packet들을 막고싶다면 다음과 같이 하면 된다. 


    ./iptables –A INPUT –i ppp0 –p tcp --syn --destination-port ! 80 –j DROP 


    다소 복잡한듯해도 간단한 rule이다. 

    Chain 정책 

    마지막으로 한가지 남은 것이 있다. 이것은 chain의 정책을 바꾸는 것으로 INPUT과 OUTPUT chain은 디폴트로 ACCEPT로 정해져 있고, FORWARD chain은 DENY로 정해져 있다. 
    만약 당신의 컴퓨터를 라우터로 사용하려면 당신은 FORWARD chain의 정책을 ACCEPT로 설정하고 싶을 것이다. 

    이럴때 어떻게 해야하는가? 이것은 매우 간단하다. -P 옵션을 사용하면 된다. 즉 FORWARD chain을 ACCEPT로 정하기 위해선 다음과 같이 명령을 내리면 된다. 


    ./iptables -P FORWARD ACCEPT 

     

     


  • iptables, 스크립트로 만들어 사용하기

  • 이번에는 iptable 명령어를 편리하게 스크립트로 만들어서 사용해 보자 
    일단 iptables라는 파일을 다음처럼 작성해 보자. 파일의 위치는 /etc/sysconfig/ 아래에 두도록 하겠다. 



    --begin script-- 
    #!/bin/sh 

    # 우선 모든 Rule을 정리한다. 

    /sbin/iptables -F 

    # 다음으로 각각에 대한 정책을 세운다. 

    /sbin/iptables -P INPUT DROP 
    /sbin/iptables -P OUTPUT ACCEPT 
    /sbin/iptables -P FORWARD DROP 

    # localhost에서의 traffic을 받아들인다. 

    /sbin/iptables -A INPUT -i lo -j ACCEPT 

    # 확립된 연결에 대한 Packet을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT 

    # DNS 응답을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p tcp --source-port 53 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p udp --source-port 53 -j ACCEPT 

    # 인증 연결을 거부한다(그렇지 않을 경우 메일서버가 오랫동안 타임아웃 상태가 될 것이다.) 
    /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 113 -j REJECT 

    # echo나 목적지에 도착 못하거나 시간 초과된 icmp packet들을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT 

    --end script— 



    위의 스크립트는 하나의 예에 불과하고 기타 ssh나 ftp, samba등을 이용하기 위한 설정사항을 직접 작성해야 한다. 
    파일 작성이 끝났으면 파일에 실행권한을 줘야한다. 보안상 root만 실행할 수 있도록 권한을 변경한 후 위의 스크립트를 실행하면 된다. 

    확인을 하려면 /sbin/iptables –L 이라고 하면 방금 실행시킨 스크립트가 나올 것이다. 

    그리고 부팅시마다 실행을 시키려면 /etc/rc.d/rc.local 파일 맨 아래 부분에 다음처럼 넣으면 된다. 

    if [ -f /etc/sysconfig/iptables ]; then 
    /etc/sysconfig/iptables 
    fi


    1. 사용자 인증 개요

    가. 사용자 인증 시 보안 요구 사항


    사용자가 정보 자산에 접근을 요청할 때 시스템과 관리자는 사용자의 실재(實在), 사용자의 확인 그리고 권한의 부여와 같은 인증 허가의 일련의 과정을 거치게 된다. 이런 일련의 과정에서 사용자의 식별 및 인증, 사용 권한의 허가 그리고 책임추적성 보장 등의 메커니즘이 요구된다. 다음 [표 3-1]은 사용자 인증 시 요구되는 보안 요구사항이다.

     

    [표 3-1] 사용자 인증시 보안 요구사항

     

    보안 요구사항

    내용

    식별
    (Identification)

    식별은 시스템에게 주체(subject)의 식별자(ID)를 요청하는 과정으로 각 시스템의 사용자들은 시스템이 확인할 수 있는 유일한 식별자(예, Login ID)를 갖는다. 이러한 사용자의 식별자는 각 개인의 신원을 나타내기 때문에 사용자의 책임추적성(Accountability) 분석에도 중요한 자료가 된다. 따라서 개인 식별자는 반드시 유일한 것을 사용해야 하고, 공유되어서는 안 되며 중요한 의미를 갖는 식별자는 사용을 피하는 것이 좋다.

    인증
    (Authentication)

    임의의 정보에 접근할 수 있는 주체의 능력이나 주체의 자격을 검증하는 단계이다. 이는 시스템의 부당한 사용이나 정보의 부당한 전송 등을 방지한다.

    인가
    (Authorization)

    사용자, 프로그램 또는 프로세스에게 허가한 권한을 의미한다. 권한부여를 한다는 것은 누구에게 무엇을 할 수 있거나, 가질 수 있는 권한을 부여하는 과정이다.

    책임추적성
    (Accountability)

    책임추적성은 오늘날과 같은 멀티유저, 멀티태스킹이 지원되는 네트워크 환경에서는 누가, 언제, 어떠한 행동을 하였는지 기록하여, 필요시 그 행위자를 추적 가능하게 하여 책임소재를 명확하게 할 수 있는 기반다.

     

     

    2. 사용자 인증 기술

    사용자를 인증하는 방법에는 크게 사용자가 알고 있는 것을 이용하는 방법과 사용자가 소유한 것을 이용하는 방법, 사용자의 특성을 이용하는 방법이 있으며, 각각에 따른 사용자 인증 기술은 아래 [표 3-3]과 같다.

     

    [표 3-3] 사용자 인증기술

     

    인증 기술

    내용

    아는 것에 의한 인증 (What you know)

    ID/Passwd, 암호구, 개인식별번호, S/Key, OTP 등

    소유하고 있는 것에 의한 인증(Whay you have)

    IC 카드(Smart card), 마그네틱 카드(memory card) 등

    개체의 특징에 의한 인증(What you are)

    지문, 음성, 망막 측정, 서명 동작 등의 생체적 특성을 이용한 인증

     

    가. 패스워드

    사용자 인증 기술로 가장 널리 사용되는 방식으로 사용자만이 알고 있는 정보(패스워드)를 입력함으로써 사용자 인증을 수행한다. 이 방식은 가장 간편한 동시에 보안상 가장 취약한 인증 기술로써 다른 사용자가 패스워드를 추측할 수 없도록 하는 것이 보안상 가장 중요하다. 따라서 패스워드 설정 시 타인이 추측하기 어려우나 본인은 기억하기 쉬운 패스워드를 이용하여야 한다.

    나. 일회용 패스워드

    사용자의 아이디와 패스워드를 인증 기반으로 사용하는 시스템에서의 패스워드는 누출에 대한 많은 위험성과 그것에 대한 해킹 방법들이 많이 알려져 있다. 이러한 문제점을 보안하기 위하여 일회용 패스워드(OTP: One Time Password)가 쓰이기 시작하였다. 일회용 패스워드는 새로운 로그온 시도마다 새로운 패스워드가 사용되며 한번 사용된 패스워드는 더 이상 사용할 수 없다. 따라서 공격자가 통신망에서 현재 사용되고 있는 패스워드를 알아낸다고 하더라도 그 패스워드를 사용할 수 없으므로 보안성이 보장된다.

    다. 개인 식별 번호

    현금자동지급기나 전자투표와 같은 장치에 대한 접근 관리를 위해 개인에게 부여된 개인 식별번호(PIN: Personal Identification Number)로 일정한 알고리즘을 이용해 생성되며, 일련번호 형태로 제공된다. 패스워드 등과 같이 사용자가 알고 있는 것(What you know)에 의존한 인증 방식이다.

    라. 암호구

    암호구(Pass Phrase)는 연속적인 문자들의 집합으로 일반적으로 사용하는 패스워드보다는 더 긴 길이의 비트 열로 작성된 패스워드이다. 암호구는 패스워드와 같은 개념으로 사용자가 응용프로그램(예, PGP(Pretty Good Privacy))에 로그온하려면 해당 응용프로그램은 사용자가 비밀키를 써야하는 작업마다 암호구를 입력하라고 요구하는데 이는 비밀키 자체가 이 암호구에 의해서 암호화되어 저장되었기 때문이다. 또한 암호구는 일반적인 패스워드보다는 더 긴 비트 열을 이용하고 암호화기법을 사용하기 때문에 더 안전하다할 수 있다.

    마. 메모리 카드

    우리가 일반적으로 사용하는 은행의 현금카드나 신용카드 등의 마그네틱 카드도 자기 띠를 이용한 메모리 카드(Memory Card)라 할 수 있다. 메모리 카드는 데이터의 저장은 가능하나 데이터를 처리할 수는 없다. 메모리 카드에는 사용자의 인증을 위한 정보를 포함하고 있으며, 두 가지 이상의 인증 정보를 이용하여 사용자를 인증한다. 예를 들어 메모리카드(what you have)와 개인 식별번호(what you know)를 혼합하여 사용하는 것 등이다.

    바. 스마트카드

    스마트카드(Smart Card) 또는 칩 카드(Chip Card)는 신용카드 정도의 크기의 플라스틱으로 만들어져 있으며, 데이터를 저장할 수 있는 전자회로가 내장되어 있고, 교통카드와 전자화폐 등 다양한 용도로 사용될 수 있으며 주기적으로 충전하여 재사용할 수 있다. 또한 스마트카드는 메모리 카드보다는 보안성이 강하며 메모리 카드가 제공하지 못하는 다양한 기능의 제공으로 많은 관심과 연구가 진행되고 있다.


    사. 생체인식 기술


    (1) 생체인식 기술 개요

    생체인식 기술이란 살아있는 사람의 신원을 생리학적으로 또는 행동 특징을 기반으로 인증하거나 인식하는 자동화된 기법을 말한다. 생체인식 시스템은 크게 생리적인 특징을 이용한 지문, 얼굴, 망막, 혈관 패턴, 홍채, 손목 또는 손등의 정맥분포 패턴, DNA를 식별하는 방식이 있고 사람의 행위나 형태적 특성을 이용한 서명과 음성인식 등의 방법이 있다.

    (2) 생체인식 기술 요구 사항

    사용자 인증 시스템으로써 생체인식 기술에 요구되는 생체의 특성은 다음과 같다. o보편성(Universal) : 누구나 가지고 있는 생체의 특성을 이용하여야 한다. o유일성(Unique) : 각 개인마다 고유한 특성이 있어야 한다.o영속성(Permanent) : 변하지 않고 변경이 불가능해야 한다.o정량성(Collectable) : 생체인식 시스템의 센서에 의한 획득과 정량화가 용이해야 한다.생체인식 기술의 정확성을 측정하는 기준은 다음 [표 3-4]와 같다.

     

    [표 3-4] 생체인식 기술 정확성 측정기준

     

    구분

    내용

    잘못된 거부의 비율
    (False Rejection Rate; FRR, 또는 Type I

    - 시스템에서 인식된(접근허용) 인가된 사용자와 인식되지 못한 사용자간의 측정율(False on-Match Rate)

    - 허가된 사용자가 시스템의 오류로 인한 접근 거부되는 비율

    잘못된 허용의 비율(False Acceptance Rate; FAR, 또는 Type II)

    - 시스템에서 잘못 인식된 비인가 사용자와 인식하지 못한 사용자간의 측정율(False on-March Rate)

    - 허가되지 않은 사용자가 시스템의 오류로 인한 접근 허용되는 비율

    FRR과 FAR의 교차점
    (Crossover Error Rate; CER)

    - 잘못된 거부의 비율(FRR)과 잘못된 허용의 비율(FAR)의 교차점

    등록실패율
    (Failure to Enroll Rate; FER)

    - 하나의 생체원시 데이터 레코드를 등록할 수 없는 사용자가 발생 측정치

     

    아. SSO

    네트워크 사용자들은 그들이 사용하는 여러 서버들을 위해서 다수의 패스워드를 기억하고 있어야 한다. 예를 들어 한 사용자가 네트워크 접속, 전자메일 사용, 디렉토리 서비스 사용, 조직의 프로그램 사용 그리고 기타 여러 가지 서비스에 접근하기 위해서는 접속할 때마다 서로 다른 패스워드의 입력 절차를 거쳐야 하며 이것은 매우 번거로운 작업이다. 또한 관리자들은 각각의 서버에 분리된 암호 데이터베이스를 만들어야 하며 패스워드가 네트워크를 통해 자주 전달되기 때문에 이에 따른 보안 관리의 부담이 생기게 된다. SSO(Single Sign-On)란 사용자가 단 한 번의 로그인 절차를 거친 것만으로 조직의 모든 업무 시스템이나 인터넷 서비스에 접속할 수 있게 해주는 서비스로서, 사용자는 하나의 패스워드로 로그인하면 다른 인증 절차를 거치지 않더라도 자신의 사용권한이 있는 모든 네트워크 자원에 접근할 수 있는 권한을 부여한다. 관리자의 입장에서도 훨씬 적은 수의 사용자와 패스워드를 관리하게 되므로 네트워크 관리를 단순화시켜 인력이나 비용을 절감시키는 이점이 있다.특히 최근의 SSO 기술은 인증된 사용자에게 시스템 정보 및 자원에 접근할 수 있는 권한은 물론 중요 접근제어 권한까지 부여하는 EAM으로 발전되는 추세이다.다음 [표 3-5]는 SSO와 응용프로그램 인증 방식간의 차이를 설명한다.

     

    [표 3-5] SSO와 응용프로그램 인증방식 차이

     

    구분

    SSO 방식

    응용프로그램 인증 방식

    장점

    - 완벽한 보안제공
    - ID, Password 에 대한 암기 부담 감소
    - ID, Password 기록에 따른 보안 위험 예방
    - 단일 ID 사용의 편의성

    - 구축기간 단기 소요
    - 비용저가

    단점

    - 구축 기간 장기 소요
    - 비용 고가

    - SSO 방식에 비해 보안성 취약

     

    자. EAM

    (1) EAM 개요

    EAM(Extranet Access Management)은 SSO에 권한에 따른 자원 접근 통제(Access Control) 개념을 포함시킨 확장 기술이다. 기업 내부의 사용자와 함께 외부 직원 및 협력업체, 고객 등의 외부 사용자들이 접근할 수 있는 자원에 대한 권한을 관리, 제어함으로써, 기업 내 중요 정보에 비인가된 사용자가 접근하는 것을 방지하는 역할을 한다. 초기에는 웹 서버상의 자원에 대한 관리만 가능하였으나 현재는 다양한 어플리케이션에 대한 관리가 가능하다.

    (2) EAM 관리 요소o 사용자(User)자원에 접속을 요구하는 주체를 말한다. 예를 들어 사람, 네트워크 장비, 프로그램 등이며 소속, 지리적 위치, 역할 등에 따라서 Group 또는 Role로 구분할 수 있다.

    o 자원(Resource)접속이 요청되는 객체를 말한다. - Web : html file, directories, CGI, JSP, ASP files 등- File System : directories, files 등- Database : tables, rows, columns 등o 오퍼레이션(Operation)주체가 객체에게 접근 시 요구하는 행위를 말한다. - Web : GET, POST, PUT- File System : read, write, execute- Database : select, insert, delete, queries 등

    (3) EAM 구축 효과

    o 자원에 대한 접근 제어를 통한 보안성 향상

    o 다양한 사용자 인증 방법 제공(ID/PW, PKI 인증서, 생체인식, 토큰 등)

    o 사용자의 편리성과 관리 업무의 효율성 증대

    o 업무 효율성으로 인한 비용 절감 효과

    차. TACACS

    TACACS는 유닉스 네트워크에 적용되는 인증 프로토콜로, 주어진 시스템에 접근을 허용할 것인지를 결정하기 위해 원격 액세스 서버가 사용자의 인증 정보를 인증 서버에 전달할 수 있게 해준다. 암호화되지 않은 프로토콜로 그 이후 나온 TACACS+와 RADIUS 프로토콜은 암호화가 지원된다. TACACS+는 TACACS의 인증 강화 버전이지만 XTACACS나 TACACS와 호환되지는 않는다. 그리고 SLIP/PPP와 telnet의 인증에 추가적으로 S/key, CHAP, PAP를 통한 인증을 허용한다. 인증과 인가가 분리되어 있으며 개별적으로 구성이나 구현하도록 할 수 있다.

    카. RADIUS

    RADIUS(Remote Authentication Dial-in User Service)는 사용자 인증 프로토콜이다. 인터넷의 발달로 사무실에 출근하지 않고 집에서 근무하는 재택근무자가 늘고 있는데 이러한 재택근무자와 이동 근무자가 다이얼 업 네트워킹을 통해서 본사 네트워크에 접속할 때 사설 네트워크의 경계를 보호하기 위한 것이 바로 RADIUS이다. RADIUS는 RAS가 다이얼 업 모뎀을 통해 접속해온 사용자들을 인증하고, 요청된 시스템이나 서비스에 관해 그들에게 액세스 권한을 부여하기 위해, 중앙의 서버와 통신할 수 있게 해주는 클라이언트/서버 프로토콜이다. RADIUS 서버는 중앙의 데이터베이스 내에 사용자의 인증 정보(이름, 패스워드 등)를 일괄적으로 관리하여 액세스 서버에 접속할 수 있게 한다. 다음 [표 3-6]은 RADIUS와 TACACS+와의 비교표이다. 

     

    [표 3-6] RADIUS 와 TACACS+ 비교

     

    구분

    RADIUS

    TACACS+

    인증/인가 

    인증과인가 정보를 사용자프로필내에 모두가지고 있는 통합관리방식

    인증과인가방식이 분리되어있어 별도로 구성가능한 방식

    통신프로토콜

    UDP

    TCP

    특징  

    ADIUS는 해쉬기술로 암호화함 
    표준 RADIUS로는 패스워드변경불가

    ACL, 패스워드 기간지정 지원
    전송정보의암호화 
    강화된 감사 및 빌링기능 

     

     

    타. 커버로스

    (1) 커버로스 개요

    커버로스(Kerberos)는 네트워크 사용자를 인증하는 것과 관련하여 미국 MIT의 Athena 프로젝트에서 개발된 네트워크 인증 표준이다. 커버로스는 개방된 안전하지 않은 네트워크 상에서 사용자를 인증하는 시스템이며 DES와 같은 암호화 기법을 기반으로 하기 때문에 그 보안 정도는 높다고 할 수 있다. 커버로스는 티켓이라는 것으로 사용자를 인증하고, 보안상으로 볼 때 좀 더 안전하게 통신할 수 있게 한다

    (2) 커버로스 동작 원리

    텔넷(Telent)이나 기타 이와 비슷한 로그인 요청을 통해, 다른 컴퓨터에서 서버에 접근을 요청한다고 가정하였을 때, 이 서버는 로그인 요청을 받아들이기 전에 커버로스 티켓을 요구한다. 티켓을 받기 위하여 접속자는 먼저 인증 서버에 인증을 요구한다. 인증 서버는 요구자가 입력한 패스워드에 기반을 두어 세션키와 서비스 요구를 나타내는 임의의 값을 만든다. 세션키는 사실상 ‘티켓을 부여하는 티켓’이다. 그 다음에 세션키를 티켓 부여 서버인 TGS(Ticket Granting Server)에 보낸다. TGS는 서비스를 요청할 때 서버에 보낼 수 있는 티켓을 돌려준다. 그 서비스는 티켓을 거절하거나, 또는 받아들여서 서비스를 수행한다. TGS로부터 받은 티켓은 발송일자와 시간이 적혀있기 때문에, 일정 시간(대체로 8시간) 내에는 재인증없이도 동일한 티켓으로 다른 추가 서비스를 요청할 수 있다. 티켓을 제한된 시간 동안에만 유효하게 만듦으로써, 후에 다른 사람이 그것을 사용할 수 없도록 한다.

    'Security' 카테고리의 다른 글

    해킹, 바이러스 감염 시 대응 요령  (0) 2017.01.08
    암호학  (0) 2017.01.08
    FTP Active/Passive 정리  (0) 2017.01.06
    ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
    포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
    • flow 모니터링


    네트워크 엔지니어라면 언제나 관심을 가지게 되는게 기본적으로 트래픽(bps,pps)체크이지만 이건 누구나 하는 것이고
    추가 적으로 실제로 오고 가는 패킷의 헤더내용에 관심을 가지게 된다.
    모든 패킷을 덤프해서 정보를 보는것도 방법이기는 하나 10G이상의 트래픽을 다 모니터링 하려면 서버로 하는 것은 사실상
    불가능 하다. 이를 위해서 네트워크장비에서 패킷의 헤더 정보만 서버로 보내주고 이를 분석하는 것이 대안이 될 수 있다.

    • flow란.


    원래 flow란게 기본적으로 5 tuple (protocol, src/dst ip src/dst port)정보를 flow란 개념으로 사용했었다. 다시 말해서 네트워크 장비로 유입되는 헤더에서 ip 와  protocol헤더를 보고 해당 정보를 가져 오게 되는 것이다. 이 정보만 서버에 보내주면 분석이 가능 한데 다시 말하면 이 정보도 대단한 양이 된다. 모든 패킷에 대해서 이 정보를 보내주게 된다면 그 또한 서버도 버티기 힘든 분량이라 이 정보를 압축 해서 보내게 된다. 

    • netflow


    시스코에서 사용하는 netflow는 flow정보를 특정 시간(최소 1분)동안 장비에서 keeping하고 있다가 동일 flow는 counter를 증가시켜서 일종의 압축 방식으로 보내주게 된다. 이 정보가 일반 내부 트래픽 이라면 이 압축 정보가 효과가 있을 수 있으나 인터넷 트래픽이라면 5tuple을 1분동안 저장 하더라도 많은 메모리가 필요하게 되며 일반적인 네트워크 장비에서 소화 불가능한 수치가 된다. 그래서 여기에 sampling rate을 두고 몇 개당 한개씩 골라서 이 정보를 장비에서 가지고 있다가 서버에 보내주는 방식이다. 기본 개념은 좋은데 sampling rate이 높으면 기하 급수적으로 정확도가 떨어지고 sampling rate 낮으면 정보를 가지고 있는 시간동안 memory overflow가 생겨서 실제 서버로 보내주는 데이터는 sampling rate이 높을 때 보다 정확도가 더 떨어지는 기괴한 현상이 생긴다. 그래서 개인적으로 netflow는 인터넷 트래픽이 아닌 내부 데이터 연동용 장비에서만 가능 하다는 생각이다.
    그런데 오랜만에 시스코에서 이쁜짓을 했는데 그것이 flexible netflow다 5 tuple을 다 가지고 있는게 아니라 특정 요소만 찍어서 보내는 방식이다. 다시 말하면 5tuple을 다 사용한다면 1분동안 keeping 해야 되는 데이터가 1백만 이라고 하면 src ip , src port 이렇게 한정짓는 다면 1십만 정도의 flow가 생겨서 장비에서 감당 가능 한 정보가 된다. 물로 linerate로 100% 이걸 처리 해줄 하드웨어도 필요하다.. 이게 시스코에서 간만에 만든 쓸만한 장비 nexus에서는 가능하다.
    실제로 필자가 운영하는 장비에서는 모든 outbound트래픽의 src ip, src port를 다 이렇게 해서 모니터링해서 서비스 별로 실제 인터넷 트래픽 사용량을 계산하고 있다.

    • sflow


    Sflow는 netflow란 약간은 개념은 틀리다. sflow는 기본적으로 l2정보 (mac, interface, vlan)정보까지 다 가능 한게 원래 태생이다. 물론 시스코도 이런 정보는 최근에 가능하다. 그리고 sflow는 netflow처럼 데이터를 keeping하고 있는 것이 아니라 바로바로 서버에 flow정보를 보내주는 방식이다. 물로 sflow도 record단위로 그룹핑 해서 정보를 보내준다. 그러나 이 것의 약점이라면 역시나 정보가 너무 많다는 것이다. 5tuple뿐만 아니라 l2정보까지 다 보내는 방식이니 대단한 장비가 아닌 이상 1:1 (line-rate) sampling 정보를 받는 것은 불가능 하다.

    • cflow, jflow


    주니퍼에서 쓰는게 jflow이는 원래 cflow란 걸 조금 고친것으로 기본적으로 netflow와 비슷하다고 보면 된다.

    • 어느것을 사용할 것인가...


    오차 범위가 심하더라도 대략적인 trends만 필요하다면 어느것을 써도 무방하다. 비슷한 오차범위를 가지지만 그래도 일반 적인 경우라면 sflow가 더 효율적일 수 있다. 
    단 필자 처럼 line-rate 1:1 정보를 보고 정확한 트래픽 패턴과 공격시에 대한 정확한 분석이 필요하다면 현재로써는 flexible netflow가 완승이다. 물로 jflow나 sflow에서도 flexible 하게 정보의 필터링을 하고 조금더 새로운 하드웨어가 나오겠지만 그 전까지는 그리고 현존하는 장비에서는 cisco nexus의 flexible netflow를 사용하기를 바란다.


    Netflow supported by Cisco, Juniper, Alcatel Lucent, Huawei, Enterasys, Nortel, VMWare

    sFlow supported by Alaxala, Alcatel Lucent, Allied Telesis, Arista Networks, Brocade, Cisco, Dell, D-Link, Enterasys, Extreme, Fortinet, Hewlett-Packard, Hitachi, Huawei, IBM, Juniper, LG-Ericsson, Mellanox, MRV, NEC, Netgear, Proxim Wireless, Quanta Computer, Vyatta, ZTE and ZyXEL (see sFlow link)

    PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약 
    서핑하다가 본 패킷 관련 블로그 글 하나를 소개하고자 한다. 유닉스 환경에 익숙한 사용자 분들이라면
    awk, uniq, sed 와 같은 유틸리티들이 얼마나 막강하고 유용한지를 알 것이다. tcpdump 의 출력내용을 
    이 도구를 이용해 활용하는 방법이다. 원문의 글은 아래 경로에서 볼 수 있고,

    http://isc.sans.edu/diary.html?storyid=8515

    필자가 명령어 관점에서 적절히 내용을 요약 소개하도록 하겠다. 일부 명령어는 조금 수정하였다. 이 글은 SANS 의 Incident Handler 인 Guy Bruneau 가 작성한 글이며, 여러분들에게 소개해도 좋다는 승낙을 받았다. 

     

    수집된 큰 파일의 PCAP 파일을 분석하려고 하면 시간이 많이 소요될 뿐만 아니라 복잡하기만 하다. 3개의 예제를 소개할 것인데, 한개는 의심스러운 포트를 찾기 위한 것과 출발지 IP 를 찾는 것이다.
    참고로 여기서 사용한 IP 는 필자가 가지고 있는 PCAP 파일의 IP 를 랜덤하게 rewrite 한 것이다.

    첫번째 예제는 어떤 소스IP 가 목적지 107.251.237.45 번에 80 번 포트로 SYN 패킷을 보냈는지 찾는 것이다.

    일단 사용한 명령어를 보면 아래와 같으며, 하나하나 살펴볼 것이다.

    #  tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "t" $1 }'

    1) tcpdump 를 사용하면서 -n 은 resolving 을 하지 말라는 것이다. 그리고 -t 옵션은 날짜/시간을 출력하지 않으며, -r 은 fake2.pcap 파일을 읽어들이라는 뜻이다. resolving 이라고 표현한 것은 tcpdump 를 통해서 볼때 IP 주소로 안 나오고 DNS 로 변환되어 나오는 것들을 말하는데, -n 은 IP 로만 출력된다고 보면 된다.

    2) 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' 는 필터 문법을 사용한 것으로 tcp[13] = 0x02 는 TCP SYN 패킷을 뜻하고 dst host 107.251.237.46 가 목적지 IP 주소와 dst port 80 은 목적지 포트 80번을 뜻한다. 아래와 같은 결과를 얻을 수 있다.

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    IP 45.129.53.45.1107 > 107.251.237.46.80: S 2848095605:2848095605(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1109 > 107.251.237.46.80: S 2969874981:2969874981(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1113 > 107.251.237.46.80: S 3283036520:3283036520(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1117 > 107.251.237.46.80: S 1316869520:1316869520(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1118 > 107.251.237.46.80: S 416262863:416262863(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1119 > 107.251.237.46.80: S 1231482360:1231482360(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1120 > 107.251.237.46.80: S 4007769174:4007769174(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1121 > 107.251.237.46.80: S 2037777415:2037777415(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1122 > 107.251.237.46.80: S 2064521910:2064521910(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1125 > 107.251.237.46.80: S 2824615168:2824615168(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1126 > 107.251.237.46.80: S 578435425:578435425(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1127 > 107.251.237.46.80: S 3649101981:3649101981(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1128 > 107.251.237.46.80: S 4156669539:4156669539(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1130 > 107.251.237.46.80: S 2942142219:2942142219(0) win 65535 <mss 1460,nop,nop,sackOK>
    IP 45.129.53.45.1131 > 107.251.237.46.80: S 1880140019:1880140019(0) win 65535 <mss 1460,nop,nop,sackOK>

    3) 파이프와 awk ( | awk '{print $2}') 를 이용하여 tcpdump 의 결과중 출발지 IP 만 출력하게 한 것이다. 필드 $2 가 출발지 IP 이며, 목적지 주소로 할 경우 $4 로 변경하면 된다.

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    45.129.53.45.1107
    45.129.53.45.1109
    45.129.53.45.1113
    45.129.53.45.1117
    45.129.53.45.1118
    45.129.53.45.1119
    45.129.53.45.1120
    45.129.53.45.1121
    45.129.53.45.1122
    45.129.53.45.1125
    45.129.53.45.1126
    45.129.53.45.1127
    45.129.53.45.1128
    45.129.53.45.1130
    45.129.53.45.1131

    4) 파이프와 tr  (| tr . ' ')를 이용하여  . 을 공백으로 바꾸는 것이다.

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    45 129 53 45 1107
    45 129 53 45 1109
    45 129 53 45 1113
    45 129 53 45 1117
    45 129 53 45 1118
    45 129 53 45 1119
    45 129 53 45 1120
    45 129 53 45 1121
    45 129 53 45 1122
    45 129 53 45 1125
    45 129 53 45 1126
    45 129 53 45 1127
    45 129 53 45 1128
    45 129 53 45 1130
    45 129 53 45 1131

    5) 다시 파이프와 awk (| awk '{print $1"."$2"."$3"."$4}') 를 이용하여 IP 주소 형태로 구성한 것이다. $5는 포트인데 제외시킨 것이다.

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45

    6)  sort 명령어를 ( | sort) 를 이용하여 트래픽을 IP 로 정렬한다.  ** 여기 예에서는 하나의 IP 만 이용되었음을 참고하길 바란다.

    0# tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45
    45.129.53.45

    7) 다음으로 | uniq -c 명령어를 통해 출발지 IP 가 몇번 반복했는지 출력하는 것이다.

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
         15 45.129.53.45

    8) 그러면 출발지 IP 45.129.53.45 가 15번 SYN 을 보냈다는 것을 알 수 있다. 다음 명령어인 awk '{print $2 "t" $1 }' 는 보기 좋게 IP 주소와 카운트 출력을 서로 맞바꾼 것이다. 

    # tcpdump -ntr fake2.pcap 'dst host 107.251.237.46 and tcp[13] = 0x02 and dst port 80' | awk '{print $2}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "t" $1 }'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    45.129.53.45    15

    다른 예제로 사용한 것은 목적지 80 번 포트로 목적지 IP 의 건수를 출력한 것이다.  위 예제와 큰 차이는 없다.

    # tcpdump -ntr fake2.pcap 'dst port 80' | awk '{print $4}' | tr . ' '| awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '{print $2 "t" $1 }'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
    103.215.23.19   119
    105.143.221.251 5
    105.143.229.47  5
    107.211.203.241 20
    107.251.105.215 34
    107.251.237.46  75
    111.157.46.185  653
    111.190.92.253  12
    111.200.248.236 21
    111.212.148.21  40
    121.166.117.57  25
    121.205.250.221 10
    121.205.250.223 24
    123.187.14.83   31
    123.187.14.89   15
    125.167.70.221  15
    159.180.121.215 11
    189.252.57.215  5
    189.252.57.217  5
    43.197.190.189  6
    45.219.248.116  15
    59.185.219.21   5
    59.185.219.245  28
    59.185.219.57   113

    다음은 목적지 포트번호인 $5 를 사용하였는데 출력을 시키고 정렬하면서 , sed 명령어로 제일 끝부부의 출력인 : 를 삭제하여 출력한 것이다.

    # tcpdump -n -r fake2.pcap | awk '{print $5}' | tr . ' ' | awk '{print $5}' | sort | uniq -c | sed 's/:$//'
    reading from file fake2.pcap, link-type EN10MB (Ethernet)
          2
         16 1039
          3 1040
          3 1041
         30 1042
         10 1043
         10 1044
          7 1045
          6 1046
          6 1047
          7 1048
          9 1049
          7 1050
          3 1051
          3 1052
          3 1053
         21 1054
         42 1055
         64 1056
         15 1057
         10 1058
         77 1059
         49 1060
         22 1061
         16 1062
         24 1063
         22 1064
         19 1065
         21 1066
       
    간단하게 원문의 예제와 다르게 수정한 것을 소개해 보았는데, 아주 기본적인 형태를 언급한 것이다. awk, sed 와 파이프 문만 잘 사용해도 출력되는 스트링을 자유자재로 편집하여 유용한 수치를 뽑아낼 수 있다. 나 또한 즐겨쓰는 유틸리티 인데, 이 각각의 도구가 책 한권씩 소개되어 있을만큼 문자열을 다루는데 있어서는 최고다.

    tcpdump 를 예로 들어 설명했는데 tshark 의 결과를 이용하는데도 유용하다. tshark 는 출력시키고자 하는 내용을 원하는 포맷 형태로 맞추어 출력도 가능하여 효과적으로 사용할 수 도 있는데, 정리가 되는대로 여러분들에게 소개할 것이다.

    power off
    power on ctrl + break 여러번
    >o/r 0x2142
    >i
    sh version

    Would you like to enter the initial configuration dialog? [yes]: no

    Router> en
    Router#

    conf t
    enable secret cisco
    config-register 0x2102
    end
    write
    reload

    sh flash (4096K bytes)
    ----------------------------------------------------------------------

    *test2*

    #router config#
    en
    conf t
    hostname r1
    int s0       
    ip address 10.1.1.1 255.255.255.0
    no shut
    clock rate 64000
    enc ppp
    end
    sh run
    sh ip int brief
    ping 10.1.1.2


    #ethernet config#
    conf t
    int e0
    ip address 192.168.1.1 255.255.255.0
    no shut
    end
    sh ip int brief
    #pc config#
    ipconfig ip/ip 192.168.1.2 255.255.255.0
    ipconfig dg 192.168.1.1

    #network add#
    conf t
    router rip
    network 10.0.0.0     <--자신이 서비스 하는 네트웍
    network 192.168.1.0  <--   상동 
    end

    ----------------------------------------
    telnet.console 접속및 비밀번호 설정 과 접속 해제실습
    conf t
    line con 0
    login
    password cisco
    line vty 0 4
    login password sist
    exit
    1.enable password cisco
    2.enable secret router
    sh run
    telnet
    <ctrl+shift+6>x
    sh sess
    sh user
    resum 1e

    disconnect
    세션은 끊는다(자신이 연결한것을 자신이 끊는다)
    clear line 11
    세션을 끊는다(상대방이 접속한 세션을 강제로 끊는다)

    *부팅 플러쉬내용을 램으로 불러온다
    bootstrap rom(sub ios)
    ios        flash
    설정 파일 nvram  <sh startup>
              ram    <sh run> 

    0x2142 :nvram설정파일을 무시하고 부팅하라
    네크웍이 연결된곳에서 ios가져온다
    롬모드
    0x0 수동으로 부팅
    0x1 자동으로 부팅 
    0x2 to 0xF 정상적으로 플래쉬에서 부팅
    command configer-regeister 0x2102
    ctol+z =end
    reload =reboot

    ram <-------->pc  ip로 통신한다
    라우터와      랜카드 L3 L3 cross cable
    라우터와 연결된 스위치(etrhnet interface)와 랜카드 L2-L3 direct cable
    랜카드가 2개인경우 남는 이더넷카드와 라우터와 연결
    ㄱ.2번째랜카드에 ip.gateway설정
    ㄴ.ping 확인
    ㄷ.tftp server 활성
    ㄹ.copy run tftp
    ㅁ.tftp>cisco system>cisco tftp server>file 저장확인

    *버전 다른 라우터
    라우터  ㅡㅡ네트웍서버ㅡㅡ라우터
    access,space,filename contconvention
    =>sh flash 로 파일명 확인
    copy flash tftp
    copy fftp  flash(filename 주의)
    ----------------------------------------------------------------------
    *스위치 중요한 3가지 기능
    1 address learning(mac)
    2 forward/filter decision
    3 loop avoidance 
    unicast / broadcast
    동일 프레임이 쌓이므로(broadcast storm)
    맥테이블이 불안

    stp :포트를 블락 시킴으로서 루프를 없앨수 있다

    *스위치설정*

    r1 192.168.1.1
    r2 192.168.1.2
    sw 192.168.1.6
    송pc 192.168.1.5
    second lan192.168.1.4
    스위치에 아이피 부여
    텔넷설정
    라우터에서 텔넷접근
    conf t
    int vlan 1
    ip address 192.168.1.6 255.255.255.0
    no shut
    exit
    enable pasword cisco
    line vty 0 4
    login
    password cisco
    end
    telnet 192.168.1.5//라우터에서 스위치로 테스트

    *스위치 명령어
    interface vlan 1
    ip address
    duplx auto full 전화 half 무전
    sh mac address
    sh port-security
    *erase startip-config*
    show version
    reload

    *Spanning Tree Protocol
    역할:루프 해결
    동작방법:한포트를 블락
    어떤 포트를 블락 할 것인가..
    stp
    rstp
    *stp 포트 결정
    네트웍당 루트 브릿지는 하나 (패킷을 받는다)이며 각포트들은 designated port
    루트포트 :루트 브릿지로 가는 최적경로   norootbrige 는 하나의 루트 포트만 있다
    dp;세그먼트당 지정이 포트는 하나

    루트브릿지 결정
    *브릿지 아이디(브릿지 piority+mac address)를 보고 결정
    BPDU 
    root bridge =brige with the lowest brigde id

    *
    새로운루트스위치 추가시 연결되는 norootbridge의 root port를 막는 후에 루트스위치를 설정


    BPDU 루프가 어디서 돌고 있는지 알아낼수 있다
    root id = b id 자신이 바로 루트인경우
    root id x b id    자신이 루트가 아닌경우

    세션을 연결하기 위해 확인 :헬로우 타임bpdu 2초
    ----------------------------------
    sw1실습
    1홀수:192.168.1.0/24
    짝수 :192.168.2.0/24

    2홀수:vlan3
    짝수 :valn4

    3domail:sist
    4server:s1(s2.s3 client mode)
    --------------------------------
    router 활성

    ##si setting##
    vlan database
    vtp domain sist
    vtp server
    vlan 3 name vlan3
    vlan 4 name vlan4
    end
    sh vtp status//확인명령
    sh vlan      //확인명령

    client(s2.s3)
    vlan database
    vtp domain sist
    vtp client

    *trunk port 설정
    conf t
    int f0/11  
    switchport trunk enc 
    switchport mode trunk

    sh spanning-tree
    sh vlan


    *vlan setting*
    int f0/1
    switchport mode access
    switchport access vlan 3

    sh span
    sh run

    'Network' 카테고리의 다른 글

    netflow, sflow, jflow, cflow 비교  (0) 2017.01.08
    PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약  (0) 2017.01.08
    라우터 설정  (0) 2017.01.08
    라우터 패스워드 복구  (0) 2017.01.08
    Routing Table  (0) 2017.01.08

    sh run - ram info
    sh start - nvram info
    sh conf

    // 복사
    copy running-config startup-config = write

    // 인터페이스 정보
    show interfaces ehternet 0 - Layer1, Layer2

    // 명령어 취소
    명령 앞에 no 혹은 clear

    sh cdp neighbors

    라우터 텔넷 접속후 ctrl+shift+6 x 하면 자기 라우터로 돌아옴
    resume 1 하면 다시 접속함

    ## sh ##
    ip int brief - Layer1 Layer2 Layer3
    ip route
    logging - log
    processes
    memory
    protocols

    ## 라우터 상호 통신하기 ##

    // Router1 Router2 세팅
    conf t
    hostname r1
    int s0
    ip address 10.1.1.1 255.255.255.0
    no shut
    clock reate 64000
    enc ppp
    end
    sh run
    sh ip int brief

    // Ethernet 세팅
    conf t
    int e0
    ip address 192.168.1.1 255.255.255.0
    no shut
    end
    sh ip int brief

    // PC 세팅
    ipconfig /ip 192.168.1.2 255.255.255.0
    ipconfig /dg 192.168.1.1

    // 네트워크 세팅
    conf t
    router rip
    network 10.0.0.0
    network 192.168.1.0
    end

    Router2도 위처럼 셋팅..

    // 스위치
    conf t
    int vlan 1
    ip address 192.168.1.4 255.255.255.0
    no shut
    end
    sh ip int brief

    description 

    ## 패스워드 설정 ##
    line console 0 - 콘솔에 패스워드 설정 - enable 하기 전에도 패스워드 물어봄
    login
    passwd cisco

    // 텔넷 패스워드
    conf t
    line vty 0 4 - 텔넷 접속 vty, con, aux
    login
    password cisco
    end

    'Network' 카테고리의 다른 글

    PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약  (0) 2017.01.08
    라우터 - Spanning Tree, Trunk Port  (0) 2017.01.08
    라우터 패스워드 복구  (0) 2017.01.08
    Routing Table  (0) 2017.01.08
    TTL (Time To Live)  (0) 2017.01.08

    + Recent posts