'My Security Study/Skill'에 해당되는 글 6건

  1. 2014.04.20 OpenSSL HeardBleed 취약점 정리 1
  2. 2013.11.12 TCPdump
  3. 2013.11.11 TCP Connection
  4. 2013.11.11 TCP Protocol
  5. 2013.11.10 Form SQL Injection
  6. 2013.05.22 다운로드 파일의 HASH 테스트 방법

참고문헌 및 사이트

- 알기쉬운 정보보호개론 2탄 - 흥미로운 암호 기술의 세계(히로시 유키 지음)

http://www.krcert.or.kr/kor/data/secNoticeView.jsp?p_bulletin_writing_sequence=20884

http://hacksum.net/?p=2070

http://thehackernews.com/2014/04/heartbleed-bug-explained-10-most.html?m=1

http://apollo89.com/wordpress/?p=5907

http://teamcrak.tistory.com/375

http://www.theregister.co.uk/2014/04/10/many_clientside_vulns_in_heartbleed_says_sans/

http://www.ricardomartins.cc/2014/04/09/bleeding-hearts-and-sharp-bits/



1. 인터넷 통신 방식

1) 암호화 미적용방식의 인터넷 통신


엘리스가 보낸 카드번호는 암호화가 되어 있지 않아 이브에게 모두 도청당할 수 있다.


2) SSL/TLS 방식의 인터넷 통신

- 통신 내용을 암호화해주는 주는 프로토콜로서 SSL(Secure Socket Layer), TLS(Transport Layer Security)

   를 이용한다.

- SSL/TLS 상에 HTTP를 올리는 것이다.(프로토콜의 이중 구조)

- 이것에 의해 HTTP의 통신(요청과 응답)은 암호화되어 도청을 방지할 수 있다.

- SSL/TLS 로 통신을 수행할 때의 URL은 http://가 아니고 https://로 시작된다.


2. SSL/TLS의 역할

1) 인터넷 통신에서 보장해야할 것들

① (기밀성) 앨리스가 송신하는 신용카드 번호와 주소를 "도청" 당하는 일 없이 밥 서점에 보내고 싶다.

② (무결성) 앨리스가 송신하는 신용카드 번호와 주소를 "조작" 당하는 일 없이 밥 서점에 보내고 싶다.

③ (인증) 통신 상대의 웹 서버가 "진짜 밥 서점" 이라는 것을 확인하고 싶다.


2) 보장해야할 보안요소의 관련 기술

① 기밀성

- "대칭 암호" 방식을 이용

- 대칭 암호 키를 통신 상대에게 배송하기 위해 "공개 키 암호" 방식의 키 교환을 사용한다.


② 무결성

- 조작을 검출하고 데이터 인증을 수행하기 위해 "메시지 인증 코드(MAC)"를 사용

- 메시지 인증 코드는 "일방향 해시 함수"를 사용해서 구성한다.


③ 인증

- 상대를 인증하기 위해 공개 키에 "디지탈 서명"을 붙인 인증서를 사용한다.


3. SSL/TLS 적용 범위

- HTTP

- 메일을 전송하기 위하 SMTP(Simple Mail Transfer Protocol)

- 메일을 수신하기 위한 POP3(Post Office Protocol)



4. SSL과 TLS의 차이

1) SSL

- 1994년 Netscape 사에 의해 만들어진 프로토콜

- 많은 웹 브라우저에 사용되어 사실상 업계의 표준


2) TLS

- IETF가 만든 프로토콜


5. SSL/TLS 핸드쉐이크 프로토콜의 절차



6. HeartBleed 취약점 개요

OpenSSL 암호화 라이브러리의 하트비트(Heartbeat)라는 확장 모듈에서 클라이언트 요청 메시지를 처리할 때 

   데이터 길이 검증을 수행하지 않아 시스템 메모리에 저장된 64KB 크기의 데이터를 외부에서 아무런 제한 없이 

   탈취할 수 있는 취약점


   하트비트 : 클라이언트와 서버 간의 연결 상태 체크를 위한 OpenSSL 확장 모듈



7. HeartBleed 취약점 작동 방식



8. HeartBleed 취약점 동영상 설명



9. HeartBleed 취약점을 이용한 공격방법 설명

1)


2)



10. HeartBleed 취약점 소스 이해

1) HeartBeat 전문 구조

- 공격자는 헤더에서 HeartBeat 길이 2 byte 를 조작해서 서버측 메모리의 65535 바이트(65k?) 정보를 가져올

   수 있다.




2) 취약한 소스의 구조


① 첫번째 빨간 박스

- 수신된 ssl 구조체를 포인터 p에 담는다

- ssl 구조체 



② 두번째 빨간 박스

- 레코드 타입과 페이로드 길이를 변수에 담는다

- hbtype 변수에 TLS1_HB_REQUEST 저장

- payload 변수에 p 에서 TLS1_HB_REQUEST 이후 다음 번지의 2 바이트 값을 저장한다.

- 보통은 여기에 heartbeat 할 값을 넣는데 heartbleed 취약점은 여기에 빈값을 넣어 정해진 메모리의

   바깥 영역의 데이터를 가져가려고 한다.



③ 네번째 빨간 박스



- bp 변수 처음에 응답 메시지 타입을 저장하고 bp는 다음 포인터로 이동

- s2n 함수에 의해 bp 변수에 payload 2 바이트 길이를 저장하고 bp는 2바이트 이후 포인트로 이동

- 위에서 pl = p 이므로 pl 은 서버측 메모리값. 거기서 payload 에 올라온 사이즈만큼 복사해서

   bp 에 넣는다. 헤더상 2 바이트이므로 2^16 = 65535만큼의 길이를 셋팅할 수 있고

   memcpy 에서는 바이트 만큼 복사할 수 있다.

-> 그런데 왜 64KByte 가져갈 수 있지? 포인터 때문인가? ㅜㅜ 

-> 추가 체크!

 



'My Security Study > Skill' 카테고리의 다른 글

TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,

TCPdump

My Security Study/Skill 2013. 11. 12. 00:13

[reference doc/site] 

http://sbpaek.tistory.com/entry/Pumpkin-TCPDUMP-%EC%82%AC%EC%9A%A9%EB%B2%95


47.TCPdump사용법.pdf



1. TCPdump 명령어 옵션 확인



1) -n 스위치

- tcpdump 가 IP 주소를 도메인명으로 포트번호를 서비스 명으로 변환하지 않도록 함


2) -i <interface name> 스위치

- tcpdump 가 어떤 네트워크 인터페이스에서 네트워크 트레이스를 수집할 것인가를 명시함

- 일반적으로 리눅스에서는 이더넷 드라이버로 eth0 을 사용함


3) -s <snaplen> 스위치

- tcpdump 가 수집하는 패킷의 길이를 표시

- VLAN 을 사용하지 않는 이더넷의 경우 1,515로 지정하면 모든 패킷을 수집할 수 있음

- 최신 버전의 tcpdump 는 '0' 이 패킷 길이로 지정된 경우 패킷 전체를 수집하라는 것으로 인식

- 이 옵션을 주지 않으면 ip, port 만 나오고 전체 패킷이 안 나온다.


2. ARP 정보 추출



3. ICMP 정보 추출



4. MAC + ICMP 정보 추출



5. IP 대역별 정보 추출



6. 소스 및 목적지 대역별 정보 추출



7. Syn 과 Syn-ack 정보 추출



8. Reset/Push/Fin 정보 추출



9. UDP 정보 추출



10. VRRP 패킷 정보 추출



11. Multicast 정보 추출


12. Broadcast 정보 추출



'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,
[reference doc/site] 

1. 3-Way Hand shake




- 클라이언트는 접속하려는 서버의 포트번호와 클라이언트의 초기순서번호(Initial Sequence Number, ISN)

   를 지정하 SYN 세그먼트를 보냄

- 서버는 서버의 초기순서번호(ISN)를 포함한 자신의 SYN 세그먼트로 응답함

   또 서버는 클라이언트의 ISN + 1 ACK 를 보냄으로써 클라이언트의 SYN 에 확인 응답함

- 클라이언트는 서버로부터 보내 온 SYN 에 대하여 서버의 ISN + 1 ACK 로 확인응답을 보내야 함


2. 와이어 샤크와 TCP Dump 에서의 3 way Hand shake

1) 와이어 샤크



2) TCP Dump








'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Protocol  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,

[reference doc/site] 

http://sweet-memories.tistory.com/3

http://ccnpsecurity.blogspot.kr/2011/12/tcp-header-format.html

- http://blog.naver.com/ssamba?Redirect=Log&logNo=125712071

http://packetcrafter.wordpress.com/2011/02/13/tcp-flags-hackers-playground/


1. TCP 프로토콜 구조



- telnet 은 요즘은 리눅스에서도 사용되지 않고 ssh 로 대체됨

- 꼭 봐야할 프로토콜 : IP, ICMP, TCP, UDP


2. TCP 프로토콜 역할과 특징

1) 역할

- 데이터를 전송 전 양 종단 간의 연결 설정

- 연결 설정 후 가상회선 생성

- 데이터그램 연결이 설정된 것을 알리고 연결종료를 통해서 연결을 종료

- 패킷이 아닌 전체 메시지를 기다림

- 오류 검출 기능과 손상된 프레임의 재전송을 보장


2) 특징

- 높은 신뢰성

- 가상회선 연결 방식 : 전화선과 비슷한 개념

- 연결의 설정과 해제

- 데이터 체크섬 : 요즘은 장비들이 각각 기능에 따라 패킷을 건드려서(소스 IP 변경 등) 잘 사용안됨

- 시간 초과와 재전송

- 데이터 흐름 제어


3. TCP Segment Format


- TCP 세그먼트의 전문 구조 (20byte)


- TCP 세그먼트를 2바이트 단위로 쪼갠 구조



- 출발지, 목적지 포트 번호 : 호스트에 있는 응용 프로그램의 포트 번호

- 순서번호 : 전달되는 각 바이트에 대한 시퀸스 넘버로 1씩 증가

- 확인번호 : 수신측에서 수신하고자 하는 바이트의 번호

- 헤더길이 : TCP 헤더의 길이

- 예약 : 아직 사용하지 않는 필드로 값은 0


4. TCP Flag


1) URG (Urgent)

-  Urgent point 유효여부, Urgent pointer 란 전송하는 데이터 중 긴급히 전달해야 할 내용이 있을 

    경우에 사용


2) ACK (Acknowledgement)

- 받는 사람이 보낸 사람 시퀸스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK

   를 보냄


3) PSH (Push)

- 대화형 트랙피에서 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달


4) RST (Reset)

- 재설정을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업. 비 정상적인 세션 연결 끊기에

   해당


5) FIN (Finish)

- 세션을 종료시키는 데에 사용되며 보낸 사람이 더 이상 보낸 데이터가 없음을 보여줌


6) SYN (Synchronization)

- 세션을 설정하는 데에 사용되며 초기에 시퀸스 번호를 보내고, 시퀸스 번호는 임의적으로

   생성하여 보냄


- 와이어 샤크에서 TCP Flags



'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,

[reference doc/site] 

http://www.9lessons.info/2008/12/sql-injection.html

http://www.w3resource.com/php/function-reference/addslashes.php

http://docs.moodle.org/dev/Slashes

http://kyumboy.tistory.com/40


1) 정의

- 폼 기반 사용자 인증을 하는 어플리케이션에서 사용자 인증을 위한 쿼리가 참이 되도록 하여 인증을 우회

   하는 SQL Injection 취약점중의 하나


2) 특징

- where 절 이하가 항상 참이 되도록 입력 폼에서 쿼리 조작을 한다.

- 입력한 id 에 의한 개별 사용자 인증이 아닌 Table 에서 반환되는 첫 번째 레코드가 있으면 사용자 인증이 

   되는 것으로 권한을 획득


3) 예



- Java

- Login Source


String userid = request.getParameter("userid");

String password = request.getParameter("password");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection("jdbc:odbc:projectDB");

query = "SELECT * FROM Users WHERE user_id ='" + userid + "' AND password ='" + password +"'";

PreparedStatement ps = connection.prepareStatement(query);
ResultSet users = ps.executeQuery();

if(users.next()){

//some thing here
}
else{

}


- 실제 작동되는 쿼리


query = "SELECT * FROM Users WHERE user_id ='' OR 1=1; /* AND password ='*/--'";


- PHP

- Login Source


$myusername=$_POST['usr']; 

$mypassword=$_POST['pwd']; 

$sql="SELECT * FROM users WHERE user='$myusername' and password='$mypassword'";

$result=mysql_query($sql);
$count=mysql_num_rows($result);

if($count==1){

//some code
}
else {

}


- 실제 작동되는 쿼리


$sql="SELECT * FROM users WHERE user=''OR 1 = 1;//' and password='....'";


4) 조치

① addslashes(), stripslashes()

- java, php 소스는 post 로 넘어온 값에 addSlashes() 함수를 붙여 작은 따옴표, 큰 따옴표 문자열 

   앞에 백 슬래시를 추가시켜 저장한다.

- DB 에 저장된 값을 꺼내 비교할 때는 stripslashes() 함수로 백슬래시를 제거해서 비교한다


//Java Code

addSlashes(String userid);

// PHP Code
$myusername=addslashes($_POST['usr'];);



- 예



② 매개변수 활용

- 쿼리문내에서 ? 등의 매개변수를 사용해서 입력 변수를 매칭시킨다.



③ 입력 문자열 길이 제한

- ID, 비밀번호 자리에 맞게끔 입렵박스 length 를 제한하면 명령어 삽입이 어렵다.


'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,


ac.zip


HashTab_v4.0.0_Setup.exe



파일 다운로드 기능이 있는 프로그램을 사용할 때는 상위기관 가이드에 따라 다운로드 파일의 해시 처리를 해서

악의적인 파일 위변조로부터 회사의 프로그램을 보호해야 한다.

테스트할 때 관련 프로그램 등을 쉽게 못 찾아 여기에 남긴다.


1. 다운로드 파일의 관련 근거 규정

- 금융감독원 HTS 안정성 제고방안(2010.05)

리버싱 공격 등으로부터 HTS프로그램이 보호될 수 있도록 프로그 개발시 분석이 어렵도록 프로그램을 개선하거나, 접속시마다 프로그램 변조여부를 자동 점검하도록 하는 등의 보안대책을 강구


2. 해시 테스트 

1) 소스 파일 선택



2) 소스 파일과 동일한 타겟 파일 생성

- cmd 창에서

- fsutil file createnew "target_file_name" "파일_사이즈(byte)"



3) 타겟 파일의 날짜 속성 변경을 위한 프로그램 설치

- 첨부 파일의 ac.zip 을 풀고 설치

- 마우스 오른쪽 버튼 누르면 메뉴 생성



4) 타겟 파일 날짜 속성 변경

- 타켓 파일에서 마우스 오른쪽 버튼 눌러 "Change Attributes" 메뉴 실행

- 파일 다운로드 기능이 있는 프로그램에서 파일의 다운로드 결정은 통상 "파일 사이즈", 

   "파일 생성/수정 날짜" 체크 방식을 많이 이용



5) 소스 파일과 타겟 파일의 해시값 비교

- 소스 파일



- 타겟 파일



6) 타겟 파일을 다운로드 되는 폴더에 복사해놓고 접속. 타겟 파일이 소스 파일로 다시 다운로드

    되는지 확인. 해시 비교를 하면 된다.




'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
Posted by i kiss you
,