-
Dream Beginners드림핵 2025. 2. 23. 23:38
해킹 : 타인의 컴퓨터 시스템에 무단으로 침입해서 정보 또는 권한을 탈취하거나, 시스템을 파괴하는 것
- 컴퓨터 시스템에서 취약한 부분을 찾아내는 단계
- 이를 공격하는 단계
어떤 대상에서 취약점을 찾아낼 것인지에 따라 분리
웹 해킹 (Web Hacking)
웹을 대상으로 하는 해킹 및 관련 기술
웹 서버와 클라이언트에서 발생하는 각종 취약점들과 이를 공격하는 기법
웹 상에서 본래의 의도와 다른 동작을 일으키거나 데이터를 도용, 변조, 시스템을 손상시키는 등의 악의적인 행위
시스템 해킹 (System Hacking)
포너블, 소프트웨어 해킹
소프트웨어의 취약점을 찾아서 이를 공격하는 해킹 분야
컴퓨터 프로그램의 행위를 조작하여 공격자가 원하는 행동을 실행하도록 하는 공격 전반
- 프로그램이 시스템 상에서 작동하는 방식
- 프로그램을 분석하는데 필요한 도구
- 취약점의 유형
- 공략하는(익스플로잇하는) 방법론
목표 : 공격 대상 프로그램이 구동되는 서버의 임의 유저와 같은 권한을 획득하는 것
⇒ 원격코드실행(Remote Code Execution) : 원격 환경에 있는 공격자가 타겟 서버에서 운영체제의 명령어를 실행할 수 있는 공격
리버싱 (Reverse Engineering)
프로그램을 역으로 분석하여 작동 원리를 알아내는 기술
소프트웨어에서 취약점을 파악하거나 악성 프로그램의 행동을 분석하는 등의 용도
리버싱은 프로그램을 분석하는 모든 과정의 기본 ('해킹'이면서 동시에 '분석’)
- 프로그램의 동작을 직접 실행 시켜보면서 소스 코드의 내용을 추측
- 컴파일된 결과물의 데이터를 분석하여 소스 코드의 내용을 유추, 복구
이진 파일 (코드를 컴파일한 산출물) : 사람이 눈으로 식별하기 어려운 데이터
⇒ 디스어셈블러(disassembler), 디컴파일러(decompiler)와 같은 도구를 이용
Wargame
의도적으로 취약점이 존재하도록 설계된 모의 해킹 환경
CTF (Capture The Flag)
해킹 방어 대회의 일반적인 형식
Flag : 공격 대상인 시스템에 존재하는 파일 (이 파일의 내용이 공격자가 제출해야 하는 답안)
라이트업(write-up)
워게임 혹은 CTF 문제에서 플래그를 찾는 과정, 즉 문제 풀이 과정을 정리한 것
컴퓨터 과학(Computer Science)
컴퓨터를 이용한 모든 작업과 그 기반 이론을 연구하는 학문
코딩뿐만 아니라 계산 이론, 알고리즘, 소프트웨어 설계, 네트워크 등 광범위한 영역을 포함
진법
n진법은 한 자릿수를 n가지(0~n-1)의 숫자 혹은 문자로 표현
- 10진법: 10개(0~9)의 숫자로 수를 표현
- 2진법: 2개(0,1)의 숫자로 수를 표현
- 컴퓨터에서 가장 기본적인 전기적 신호의 ON/OFF 상태를 1과 0으로 표현
- 16진법: 16개(0~9, A~F)의 문자로 수를 표현
- 0x라는 접두어
- 16진수는 컴퓨터 이곳저곳에서 활용
- 프로그램을 분석할 때 사용하는 디버깅 도구 같은 경우, 일반적으로 메모리의 위치를 나타내는 주소값을 16진수 형태로 출력
비트와 바이트
컴퓨터는 0과 1만으로 데이터를 표현하고 처리 (전기 신호가 통할 때는 1, 아닐 때는 0)
비트(bit, binary digit) : 컴퓨터에서 사용하는 데이터의 최소 단위
바이트(byte) : 1바이트(byte)는 8개의 비트로 구성 (메모리에 저장되는 최소 단위)
- 1 바이트는 $2^8$=256가지의 수
- 10진수로 0~255
- 2진수로 00000000~11111111
- 16진수로 00~FF
최상위 비트(MSB, Most Significant Bit) : 가장 왼쪽에 있는 비트
- 부호 비트 : 부호가 있는 데이터의 경우, MSB는 부호의 의미 (MSB가 0이면 양수, 1이면 음수)
- 컴퓨터에서 음수를 표현할 때 2의 보수 사용 ⇒ ~연산 후, +1
최하위 비트(LSB, Least Significant Bit) : 가장 오른쪽에 있는 비트
바이트 오더링(Byte Ordering)
2 바이트 이상의 데이터는 메모리에 연속적으로 저장
⇒ 이때 각 바이트가 메모리에 정렬되는 방식을 바이트 오더링(Byte ordering)
- 빅 엔디안(Big Endian) : 큰(Big) 바이트부터 낮은 주소에 저장
- 네트워크 상에서 데이터를 전송, SPARC CPU 등에서 사용
- 리틀 엔디안(Little Endian) : 작은(Little) 바이트부터 낮은 주소에 저장
- Intel의 x86, x86-64 CPU에서사용
⇒ 문자열을 메모리에 저장할 때는 바이트 오더링을 고려X
비트 연산
피연산자를 2진수로 표현하여 비트(bit) 단위로 연산하는 것
1은 참, 0은 거짓
- 논리 연산논리 연산자 설명
x ** x && y 둘 다 참이면 결과는 참 (AND) **!**x 참이면 결과는 거짓, 거짓이면 결과는 참 (NOT) - 비트 연산자비트 연산자 설명
x ** ** y x & y 두 비트 모두 1이면 결과는 1 (AND) x ^ y 두 비트가 같으면 결과는 0, 다르면 결과는 1 (XOR) **~**x 비트가 0이면 결과는 1, 1이면 결과는 0으로 모든 비트를 반전 (NOT) - 시프트(shift) 연산 : 비트를 특정 값만큼 이동시프트 연산자 설명
x << n 비트를 n만큼 왼쪽으로 이동 (오른쪽 빈 칸은 모두 0으로 채움) == x * 2n x >> n (산술 시프트) 비트를 n만큼 오른쪽으로 이동 왼쪽 빈 칸은 MSB와 동일한 비트 값으로 채움 (양수는 양수, 음수는 음수로 부호가 유지) == x / 2n x >>> n (논리 시프트) 비트를 n만큼 오른쪽으로 이동 (왼쪽 빈 칸은 모두 0으로 채움) (음수는 부호가 유지X)
비트 연산 활용
- 비트 마스킹(Bit Masking) : 특정 위치의 비트만 표시하거나 가리는 연산
- AND (&) 연산과 시프트 연산을 활용하여 특정 비트/바이트 가져오기
- XOR 연산을 활용한 비교와 암호화
- XOR 연산은 비트 값이 같으면 0을 반환
인코딩과 디코딩
인코딩(Encoding) : 데이터를 특정한 형식으로 변환
- 데이터의 크기를 줄이거나(압축), 컴퓨터가 이해하기 쉽게 변환할 때 사용
디코딩(Decoding) : 역인코딩
아스키 코드 (ASCII Code)
문자를 숫자로 변환하는 문자 인코딩(character encoding)의 표준
- 아스키 문자 1개는 1바이트 크기 (7비트로 문자 표현, 1 비트는 오류 체크)
- $2^7$=128가지의 문자 표현
유니코드(Unicode)
전세계 모든 언어의 문자에 고유한 번호를 부여하는 국제 표준 코드
- 최대 32 비트로 문자 1개를 표현
- 유니코드의 처음 128개 문자는 아스키 코드의 문자와 일치
- U+뒤에 16진수
- UTF-8, UTF-16, UTF-32 등 다양한 인코딩 형식 (UTF 뒤의 숫자는 비트)
- UTF-8은 1~4 바이트의 가변적인 크기로 문자 1개를 표현
URL 인코딩 (퍼센트 인코딩)
웹 브라우저로부터 받은 URL 문자열을 유효한 형식으로 변환
- 인코딩이 필요한 특수문자는 :/?#[]@!$&'()*+,;=%공백
- % 기호 뒤에 해 문자의 아스키 코드 16진수 값
Base64 인코딩
이진 데이터를 아스키 문자로 구성된 텍스트로 변환하는 인코딩 방식
64개의 아스키 문자가 인코딩에 사용 (알파벳 대소문자(52자), 숫자(10자), +, /)
- 이진 데이터를 텍스트 형식으로 나타내기 위해 사용
- 원본 이진 데이터를 비트 나열로 표현, 6비트씩 끊어서 묶기 (만약 비트의 개수가 6의 배수가 아닐 경우, 0을 뒤에 추가)
- base64 테이블에서 해당하는 문자를 찾아 치환
- 문자 수가 4의 배수가 되도록 문자 '='를 반복해 뒤에 추가 (패딩(Padding))
운영체제 (OS, Operating System)
하드웨어와 사용자/응용 프로그램 사이에서 중재
하드웨어 자원을 효율적으로 사용할 수 있도록 분배, 할당하여 성능을 높임
- CPU 스케줄링
- 메모리 공간을 각 프로세스에 분배하고 사용하는 과정을 관리
- 컴퓨터가 입출력 장치와 정보를 주고 받는 과정을 관리
커널(Kernel)과 셸(Shell)
커널(Kernel) : 하드웨어 관리
- 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리
- 시스템이 부팅될 때 메모리에 올라가서 꺼질 때까지 실행
셸(Shell) : 사용자가 운영체제에 명령을 내릴 때, 인터페이스
- 사용자가 셸에 명령을 입력하면, 셸이 명령어를 해석하여 커널에 요청
운영체제의 종류
- Windows : 마이크로소프트개발. GUI기능을 제공하여 편리
- UNIX : 벨 연구소 개발. 현대 운영체제의 원형. CUI기반의 대화식 운영체제
- Linux : 리누스 토발즈(Linus Benedict Torvalds)가 UNIX기반으로 개발
- 오픈소스 프로그램 (소스 코드를 공개하여 누구나 수정하고 재배포 가능)
- CUI기반의 운영체제
- Ubuntu, CentOS 등의 다양한 버전
- 그 외의 UNIX기반 운영체제
- macOS
- 모바일 운영체제 Android와 iOS
출처
'드림핵' 카테고리의 다른 글
[드림핵] Return Address Overwrite (0) 2025.04.30 x86 Assembly (0) 2025.03.10 리눅스 메모리 구조 (Memory Layout) (1) 2025.03.10 컴퓨터 구조 (Computer Architecture) (0) 2025.03.10 [DreamHack] Dream Beginners Tips (0) 2025.03.02