1) 웹과 HTTP의 이해
(1) 웹의 이해
- 웹: 전 세계의 사람들과 생각을 공유하기 위해 만들어짐.
HTML은 하이퍼텍스트를 효과적으로 전달하기 위한 스크립트 언어
대부분의 사이트에 사용자가 마음대로 접근할 수 있기 때문에 보안 취약점이 매우 많음
(2) HTTP 프로토콜
- 다양한 응용프로그램에 접근해 활동이 가능한 프로토콜.
웹에서는 HTTP 외에도 SMTP, POP, FTP, Telnet 등 다양한 프로토콜이 사용됨
- 기본 연결:
- 서버가 준비상태가 되면 클라이언트는 읽고자 하는 문서를 서버에 요청
-> 서버는 웹 문서 중 요청받은 것을 클라이언트에 전송하고 연결 종료
(3) HTTP Request
: 웹 서버에 데이터를 요청하거나 전송할 때 보내는 패킷
GET, POST같은 메서드를 주로 사용
- GET: 요청 데이터의 인수를 웹브라우저의 URL을 통해 전송
각각의 이름을 &로 결합하며, 글자 수는 255자로 제한됨
데이터가 주소 입력란에 표시되기 때문에 최소한의 보안도 유지되지 않음
ex)www.wishfree.or.kr/list.php?page=1&search=test
- POST: URL에 요청 데이터를 기록하지 않고 HTTP헤더에 데이터를 전송
GET에서의?~~
부분이 존재하지 않고 내부의 구분자가 이름과 값을 구분, 서버가 해석하여 데이터를 처리함
보내려는 데이터가 URL을 통해 노출되지 않아 최소한의 보안성은 갖춤
- 일반적으로 게시판의 목록은 접근자유도를 부여하기 위해 GET을,
게시글을 저장/ 삭제하거나 대용량 데이터를 전송할 때는 POST방식을 사용- 외에도 HEAD, OPTIONS, PUT 등의 방식이 사용됨
(4) HTTP Response
: HTTP Request에 대한 응답 패킷
- 서버에서 쓰이는 프로토콜 버전, Request에 대한 실행 결과 코드, 간략한 실행 결과 설명문에 대한 내용 등이 담겨있음
데이터 전송이 끝나면 서버는 연결을 끊음
2) 웹 서비스의 이해
(1) 프론트엔드
: 웹 브라우저에서 실행되는 프로그램 영역
HTML, JS, CSS 등으로 효율적인 웹 운영을 가능하게 함
(2) 백엔드
: 웹 서비스를 제공하는 데 필요한 REST API를 제공하는 영역
Java, Python 등으로 프론트엔드에서 요청된 수행을 실행함
3) 웹 해킹
(1) 웹 취약점 스캐너를 통한 정보 수집
- 웹 정보를 수집하기 위해 웹 메뉴를 파악하는데, 이 활동을 효율적으로 하기 위해 웹 취약점 스캐너를 사용함
하지만 이 스캐너로 확인된 취약점이 실제 보안 문제가 있는 취약점인지는 따로 확인해야함
(2) 웹 프록시를 통한 취약점 분석
- 웹의 구조를 파악하거나 취약점을 점검할 때, 웹 해킹을 할 때 웹 프록시를 사용함
클라이언트가 웹 서버와 웹 브라우저 사이에 전달되는 모든 HTTP 패킷을 웹 프록시를 이용해 확인하며 수정 가능함
(3) 구글 해킹을 통한 정보 수집
4) 웹의 취약점과 보안
(1) 웹의 주요 취약점
- 명령 삽입 취약점
: 클라이언트의 요청을 처리하기 위해 전송받는 인수에 특정 명령을 실행할 수 있는 코드가 포함되는 경우, 적절히 필터링하지 않으면 삽입공격에 대한 취약점이 생김
- 인증 및 세션 관리 취약점
- 취약한 패스워드 설정
- 사용자 데이터를 통한 인증
- XSS 취약점
: 공격자가 작성한 스크립트가 다른 사용자에게 전달되며 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 뺏거나 웹사이트를 변조할 수 있음
- 취약한 접근 제어
: 인증된 사용자가 수행할 수 있는 제한이 제대로 적용되지 않음
=> 공격자가 사용자 계정 접근, 접근권한 변경같은 수행할 수 있음
- 보안 설정 오류
- 민감한 데이터 노출
- 공격 방어 취약점
- CSRF 취약점
- 취약점이 있는 컴포넌트 사용
- 취약한 API
(2) 웹의 취약점 보완
- 특수문자 필터링
- 서버 통제 적용
- 지속적인 세션 관리
1) 시스템 구성과 프로그램 동작
(1) 프로그램과 코드 보안
- 소스코드는 하드웨어, 어셈블리어에 비해 보안에 취약할 수 있음
(2) 시스템 메모리의 구조
- 스택: 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장
- 힙: 프로그램이 동작할 때 필요한 데이터를 임시로 저장
- 레지스터: CPU의 임시메모리, CPU연산과 어셈블리어 동작에 필요
(4) 셸
: 운영체제를 둘러싸고 있으면서 입력받은 명령어를 실행하는 명령어 해석기
버퍼 오버플로/ 포맷 스트링 공격을 통해 얻고자 하는 것= 관리자 권한의 셸
(5) 프로세스 권한과 SetUID
: 유닉스 시스템을 해킹하는데 아주 중요,
rwsr-xr-x
로 권한이 설정되어있는 경우
각 계정에는 고유한 UID가 존재하는데, SetUID가 부여된 프로그램을 실행할 때는 임시로 권한 변경이 가능함
2) 버퍼 오버플로 공격
(1) 버퍼 오버플로 공격의 개념
: 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 발생
=> 정상적인 경우에는 사용되지 않아야 할 주소공간에 해커가 임의의 코드를 덮어쓰는 것
(3) 버퍼 오버플로 공격의 대응책
- 버퍼 오버플로에 취약한 함수 사용하지 않기
strcpy
,strcat
,getwd
,gets
,fscanf
,scanf
,realpath
,sprintf
등- 최신 운영체제 사용하기
3) 포맷 스트링 공격
(1) 포맷 스트링 공격의 개념
: 데이터 형태에 대한 불명확한 정의로 발생
버퍼 오버플로와 가이 ret값을 변경하여 임의의 코드 실행 가능
** 포맷 스트링: %s, %d, %f, %u ...
(2) 포맷 스트링 공격의 원리
- 포맷 스트링 문자를 이용한 메모리 열람
-> 포맷 스트링 문자를 이용한 메모리 변조
4) 메모리 해킹
(1) 메모리 해킹의 개념
- 메모리 해킹: 프로그램의 동작에 관여하지 않고 프로그램이 실행되는 데 필요한 정보를 저장해둔 메모리를 조작하는 것
사용자가 해킹여부를 인지하지 못하고, 해킹 흔적을 추적하지 쉽지 않음
=> 메모리 주소에 저장되는 값을 암호화해야 함
(2) 메모리 해킹의 원리
ex) 지뢰찾기 게임을 대상으로 한 메모리 해킹
1. MHS (memory hacking software)실행 후 메모리 해킹 대상 프로그램 선택
2. 메모리에서 특정 값 찾기
3. 지뢰찾기 게임 내의 시간 값을 증가시키기 위해 게임 실행
4. 2번의 기존 확인 대상에서 값이 증가한 대상 찾기
5. 메모리 주소 및 값 확인
6. 메모리 주소 변경