본문 바로가기
SeSAC/어플리케이션 보안 & 취약점 진단

[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 3일차

by zivvon 2023. 11. 16.
목차 접기

어플리케이션 보안 & 취약점 진단

[ 쉘 Shell ] ⭐

▶ 쉘 Shell : 사용자의 명령어를 받아들이고 해석 및 실행

- 멀티프로그래밍 방식인 윈도우는 cmd를 이용해 Dos Shell 동작

~> 과거 DOS 시절부터 쓰여졌던 명령어 이용 가능

~> 실행 > cmd

~> 일부 내부 명령어 내장

 

- 리눅스는 바탕화면(Desktop)에서 Ctrl + Alt + T를 눌러 터미널 쉘 창을 실행

 

[  디스크 Disk  ]

디스크의 종류

- 주기억 장치

~> RAM(Random Access Memory)

~> 휘발성 데이터 저장

~> 1G 2G 4G 8G ...

~> 플래쉬 메모리는 RAM(휘발성)이 아니다

~> 속도 빠름

 

- 보조기억 장치

~> 컴퓨터 동작 시 데이터를 영구(반영구)적으로 저장

~> 비휘발성 데이터 저장

~> 속도 느림

~> 디스크라 불림

 

Disc

 : 오디오 CD, CD-ROM, DVD-ROM, DVD-RAM 또는 DVD-비디오 등과 같은 광학 미디어

 

- 일부 디스크는 읽기 전용 (ROM)이며, 그 밖에 콘텐츠를 한 번 구울 (파일 쓰기) 수 있는 디스크여러 번 지우고 다시 쓸 수 있는 디스크(ex. CD-RW, DVD-RW 및 DVD-RAM 디스크)도 존재

- 모든 디스크(disc)는 분리 가능, 즉! 데스크탑이나 Finder에서 디스크를 마운트 해제하거나 추출하면 실제로 컴퓨터에서 분리됨

 

⚠️ Disc와 Disk는 다른 것!

 Disk

: 플로피 디스크(외장 하드 드라이브인 컴퓨터 하드 드라이브의 디스크) 같이 자성을 띤 미디어

 

- 일부러 잠그거나 보호하지 않는 한 디스크(disk)는 항상 다시 쓸 수 있음!

- 디스크를 몇 개의 작은 볼륨으로 파티션 분할 가능

- 디스크는 대개 금속이나 플라스틱 케이스 안에 밀봉되어 있음

- 디스크와 외장 장치를 함께 '하드 드라이브'라고 부름

 

자기테이프

: 플라스틱 테이프 겉에 산화철 등의 자성 재료를 바른 테이프

 

- 대부분 컴퓨터 기억, 오디오, 비디오를 기록하는 데 쓰임

- 비영구적, 순차 기록이라는 단점 존재

 

하드 디스크 HDD(Hard Disk Drive)

- 컴퓨터 주요 부품

- 원래 이름은 자기 디스크(Magnetic Disk Drive, MDD)

- 나중에 자기를 이용한 플로피 디스크 드라이브 (Floppy Disk Drive)

- 딱딱한 디스크라는 뜻

- 최초의 HDD는 1956년 IBM의 'RAMAC(Random Access Method of Accounting and Control)

~> 무작위 접근 방식의 회계 및 제어 방식

~> 1953년 IMB 개발

~> 60cm, 약 5MB의 저장공간

~> 지게차 또는 대형 화물 비행기 통해 배송

 

Floppy Disk Drive

- 자성체로 덮여 있는 회전할 수 있는 원판 존재

 

인터페이스

- IDE(Integrated Drive Electronics) 또는 ATA

~> 가장 오래된 규격 40개의 핀으로 구성

~> 병렬이라는 뜻에서 PATA(Parallel Advenced Technology Attachment)라고도 불림

~> 주종관계(Master/Slave) 필요

~> 버전별로 전송 속도 다름

~> 구하기 힘들어서 비쌈

~> SATA와 SCSI, SAS

SCSI(Small Computer System Interface) SAS(Serial Attached SCSI)
서버 또는 워크스테이션용 SCSI 발전
별도 확장카드 필요 서버 등의 대형 컴퓨터
88핀, 320mb SATA 규격 가능하지만 반대로는 불가
SAS로 대체되는 추세  

 

하드디스크 내부 구조

- 플레터 : 금속 재질이며 반사 가능(래핑처리), 산화철 등의 자성체로 코팅

~> 실린더

~> 헤드

~> 섹터

~> 실린더 x 헤드 x 섹터 = HDD 크기 (과거)

~> 현재는 LBA(Logical Block Addressing) => 논리 블록 주소 지정

 

- 헤드 : 플래터의 표면에 움직이면서 데이터 R/W

- 스핀들 모터 : 모터로 플레터를 회전

 

MBR(Master Boot Record) ⭐⭐

- 부팅 과정

 

 파티션 테이블 Partition Table⭐

- 16byte 4개의 파티션, 64byte

- 4개 이상을 원한다면 마지막 파티션에 확장 파티션 가능

- MBR 영역에 기록되는 파티션 정보는 주 파티션 (부팅 가능)

- 16byte offset 정보 ⭐

 

 엔디안 Endian

: 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 함

 

- 빅 엔디언 (Big-endian) : 큰 단위가 앞에 나옴

~> 유닉스 시스템

~> 가독이 좋지만 CPU 처리에는 느림

 

- 리틀 엔디언 (Little-endian) : 작은 단위가 앞에 나옴

~> Intel CPU

~> CPU 처리가 빠르지만 가독이 힘듦

 

파일의 복사 및 이동 속도 비교

  복사 이동
같은 파티션 느림 빠름
다른 파티션 느림 느림

 

 

Solid State Disk (SSD)

- NASA 물리적 충격에 약한 HDD 대체

- HDD 물리적인 회전 접근, 반도체 메모리에 저장

- 속도 개선, 가격 비쌈

 

Trim

- HDD는 덮어쓰기(Overwrite)가 가능

- SSD는 덮어쓰기가 불가능

- 파일 삭제 시 특정 블록이 더이상 필요하지 않으면 내부적으로도 처리

 

Nand

- 반도체의 셀이 직렬

- 데이터 순차로 읽기 때문에 NOR보다는 느림

- 별도의 셀의 주소를 기억할 필요가 없어 용량 늘리기 쉽고 쓰기 빠름

- USB 메모리, SSD

 

NOR

- 반도체의 셀이 병렬

- 셀 단위 랜덤 액세스이며 읽기 빠름

- 한 셀씩 기록하기 때문에 쓰기 속도 느림

- RAM처럼 실행 가능한 코드 저장

 


 

💡실습!

HxD 툴과 FTK Imager 툴을 사용하여 파티션을 복원해보자!

 

' NTFS 파일 복원하기 '

1. 파티션 테이블 확인
⚠️ 원래 모든 파티션 테이블 값 00으로 되어있었음



2. 복원을 위해서 구해야할 값들 => File System Type, 파티션 시작 주소, 파티션의 총 섹터 수(크기)
우리가 알고 있는 정보는 오로지! 'NTFS', 'FAT32'라는 시그니처 키워드와 'B.O.O.T.M.G.R', 'RRaa'
따라서 'Ctrl + F' 단축키를 통해 텍스트 서치로 해당 섹터로 이동하면 백업본의 위치를 알 수 있다!

3. NTFS 파일 시스템 구조상 'B.O.O.T.M.G.R' 하나 전 섹터가 파티션 위치이기 때문에 'Ctrl + F' 단축키를 통해 텍스트 서치로 해당 섹터로 이동하면 파티션의 위치와 오염된 파일을 알 수 있다!
⚠️ 'BOOTMGR'을 16진수로 변환해서 그 값을 통해 서치해야 나옴!

4. 백업본의 바이트들을 복사해 오염된 섹터에 복사하고 저장하자

5. 그럼 이제, 공식을 통해 사라진 파일의 파티션 크기를 구할 수 있다.
(전체 파티션 크기 682, 111) = (파티션 위치 128) + (파티션 크기 x) - 1
따라서 파티션 크기가 나오고, 0번 섹터 (MBR)로 이동해서 파티션 테이블에 각각 맞는 값을 끼워넣으면 복원이 된다!
⚠️ NTFS 파일 시스템 타입은 '07'

' FAT32 파일 복원하기 '

: 위의 NTFS 파일 복원 과정과 비슷하지만, FAT32 파일 복원에서는 파티션의 크기 정보가 백업본 파일의 0x20~24의 4byte이며, 위치는 백업본 위치의 -6 섹터이다. 나머지는 동일! 참고로 FAT32의 파일 시스템 타입은 '0B'이다.

 

FTK Imager에서 파티션 3개가 모두 잘 복원된 것을 확인할 수 있다

 


 

✏️ 나를 위한 구체적인 공부

Q0. VBR?

A0) 'Volume Boot Record'의 줄임말부팅 가능한 파티션(볼륨)의 첫 번째 섹터에 존재. Boot Sector, 볼륨 크기, FAT 위치, $MFT 위치 등 볼륨에 관한 다양한 정보를 포함하고 있음

 

- VBR이 손상되면 볼륨(파티션)의 정상적 인식이 불가능하며 의도적으로 볼륨의 존재를 숨기기 위해 VBR을 훼손하는 경우 존재

- VBR 손상 시에는 'Backup VBR'을 통해 복구가 가능

- FAT32 파일의 경우 첫 번째 볼륨에서 6번째 위치에 존재하고, NTFS 파일의 경우 볼륨의 마지막 섹터에 존재

NTFS FAT32
볼륨의 마지막 섹터 볼륨의 첫 번째 섹터 + 6

 

Q1. NTFS 파일과 구조

A1) NTFS는 'New Technology File System'의 약자로 Microsoft에서 만든 Windows용 파일시스템

 

- NTFS는 최초의 서버용 파일시스템으로 FAT 파일시스템이 용량의 한계가 있어 대용량 서버 운영체제에 적합하지 않았기 때문

- NTFS 파일 시스템은 중요한 설정 데이터 값들이 모두 파일 형태로 할당

- 설정 파일이 별도로 존재하며, 그 파일이 볼륨 어디에 위치해도 상관 x

= 볼륨 전체가 FAT의 DATA 영역처럼 할당가능한 영역으로 됨

but, FTA 파일 시스템에서는 일정한 위치의 구조체 레이아웃에 값들이 들어가고, 그 값들을 참조하여 파일 시스템 설정이 가능한 구조

 

- 별도로 존재하는 설정파일을 MFT(Master File Table)이라고 부르며, NTFS 구조 중 가장 중요한 부분이라고 할 수 있음

 

Q2. NTFS 파일 복원할 때 쓰는 공식은 어디서 나온 것인지?

A2) 아는 분 있으면 댓글 남겨주세요 ㅎㅎ ^^......b

 

Q3. FAT32 파일과 구조

A3)

 

 

 

VBR 분석 (FAT32/NTFS)

FAT32, NTFS 파일 시스템에서 VBR 분석을 통해 각 영역의 위치 및 볼륨크기를 구하는 방법과 Backup Boot Sector를 통해 훼손된 Boot Sector를 복구하는 방법에 대해 기술한다.

c0msherl0ck.github.io

참고 블로그


 

오늘의 후기!

: 파일 구조 그림만 이해하면 쉽게 할 수 있는 실습이었다. 다만 파일 구조 그림 이해가 힘들 뿐 ㅎ....

점점 머리가 아프다. ㅜ....ㅜ