코드 보안

호기성세균·2023년 6월 7일
0

cs

목록 보기
7/30

[시스템 구성과 프로그램 동작]

(프로그램과 코드 보안)

  • 하드웨어, 어셈블리어, 소스코드 중 보안 취약점이 가장 쉽게 발생하는 곳은 소스 코드
  • 소스 코드에서 문제가 생기는 요인은’데이터의 형태와 길이에 대한 불명확한 정의

(시스템 메모리의 구조)

  • 프로그램을 동작시키면 프로그램이 동작하기 위한 가상의 공간이 메모리에 생성
  • 메모리 공간은 목적에 따라 상위 메모리와 하위 메모리로 나뉨
  • 상위 메모리에는 스택, 하위 메모리에는 힙 생성

(스택영역)

  • 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
  • 레지스터의 임시 저장, 서브루틴 사용 시 복귀 주소저장, 서브루틴에 인자 전달 등에 사용
  • 스택은 메모리의 상위 주소에서 하위 주소 방향으로 사용, 후입선출 원칙에 따라 나중에 저장된 값을 먼저 사용

(힙 영역)

  • 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데 사용
  • 프로그램이 실행될 때까지 알 수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램 프로세스가 사용할 수 있도록 미리 예약된 메인 메모리 영역
  • 힙 영역은 프로그램에 의해 할당되었다가 회수되는 작용을 되풀이함
  • 힙의 기억장소는 포인터 변수를 통해 동적으로 할당받고 돌려주며, 연결 목록이나 나무, 그래프 등의 동적인 데이터 구조를 만드는 데 반드시 필요한
  • 프로그램 실행 중에 해당 힙 영역이 없어지면 메모리 부족으로 이상 종료

(레지스터)

  • CPU 의 임시 메모리로 CPU 연산과 어셈블리어의 동작에 필요
    (스택과 레지스터의 실제 사용)
    ① push %ebp : 처음 main함수가 시작되면 main함수의 EBP 레지스터 값을 스택에 저장

② move %esp, %ebp : EBP레지스터는 항상 현재 스택 영역에서 가장 하위 주소를 저장

⑥ call function : funtion함수를 호출

⑦ pushl %ebp : function 함수의 기준 값으로, 현재 EBP 값을 스택에 저장

⑧ movl %esp,%ebp: 앞서 언급한 대로 function(1,2)의 시작에서도 프롤로그(pushl %ebp 명령과 movl %esp,%ebp)가 실행


⑩ movl 12(%ebp), %eax: EBP에 12바이트를 더한 주소 값의 내용(정수 2)을 EAX 값에 복사

⑪ ad이 %eax,8(%ebp) : EBP에 8바이트를 더한 주소 값의 내용(정수 1)에 EAX(10단계에서 2로 저장) 값을 더하면 8(%ebp) 값은 3이 됨

⑫movl 8(%ebp), %edx : EDX(extended data)레지스터는 입출력 연산에 사용하는 것으로, 큰 수의 곱셈과 나눗셈 연산 시 EXA와 함께 사용
‘movl 8(%ebp), %edx’ 명령은 EBP에 8바이트를 더한 주소 값의 내용 (정수3)을 EDX에 저장

(셀)

-운영체제를 둘러싸고 있으면서 입력받는 명령어를 실행하는 명령어

(셀의 역할)

  • 자제에 내장된 명령어 제공
  • 입력, 출력 오류에 대한 리다이렉 기능 제공
  • 와일드카드 기능 제공
  • 파이프라인 기능 제공
  • 조건부, 무조건부 명령열 작성 기능 제공
  • 서브셀 생성 기능 제공
  • 후면 처리 기능
  • 셀 스크립트(프로그램) 작성 기능

+버퍼 오버플로나 포맷 스트링 공격의 목적은 ‘관리자 권한의 셀’
+버퍼 오버플로나 포맷스트링 공격에서는 /bin/sh를 다음과 같이 기계어 코드로 바꿔 메모리에 올림(셀을 기계어로 바꾸는 이유는 메모리에 원하는 주소 공간을 올리기 위해서)

(SetUID)

  • 유닉스 파일에 RWSR-XR-X로 권한이 설정되어 있는 경우를 말함
  • SetUID 파일은 누가 실행하든 상관없이 해당 파일이 실행될 때 파일 소유자 권한을 갖는 것이 특징

(버퍼 오버플로 공격의 개념)

  • 기본적인 버퍼 오버플로 공격은 데이터의 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 발생
  • 경계선 관리가 적절하게 수행되어 덮어쓸 수 없는 부분에 해커가 임의의 코드를 덮어쓰는 것을 의미
  • 버퍼 오버플로에 취약한 함수와 그렇지 않은 함수가 있음 프로그래머가 취약한 특정 함수를 사용하지 않는다면 공격이 훨씬 어려워짐

(버퍼 오버플로 공격의 대응책)

  • 버퍼 오버플로에 취약한 함수 사용X
  • 최신운영체제 사용

(포맷 스트링 공격)

  • 데이터의 형태에 대한 불명확한 정의 때문에 발생하는 문제점

  • formatstring.c 와 같이 포맷 스트링을 작성하는 것은 정상적인 경우로, 포맷 스트링에 의한 취약점이 발생하지 않음

  • 여기서 사용된 %s 와 같은 문자열을 포맷 스트링이라고 함 이 값을 바꾸는 것을 포맷 스트링 공격이라 한다(명확하게 정의되었던 데이터 형태를 바꾸는 것)

  • 포맷스트링을 이용하면 메모리의 내용을 변조할 수 있음

(메모리 해킹)

  • 프로그램의 동작에 관여하지 않고, 프로그램이 실행되는 데 필요한 정보를 저장해둔 메모리를 조작하는 공격
  • 게임머니나 아이템 조작과 같이 게임 해킹에 광범위하게 사용
  • 백도어나 같은 프로그램을 설치하여 메모리에 있는 패스워드를 빼내거나 데이터를 조작하여 돈을 받는 계좌와 금액을 변경함
  • 사용자가 인지하지 못하는 경우가 많고 휘발성이 강한 메모리의 특성상 흔적을 추적하기 어려움
  • 메모리 해킹을 막으려면 메모리 주소에 저장되는 값을 암호화해야함

(리버스 엔지니어링)

  • 바이너리에서 소스코드를 복원하는 과정
    +코드보안의 역공학

(리버스 엔지니어링 사용분야)

- 취약점 분석 :
버퍼 오버플로우가 일어날 가능성이 있는지, 코드 변조를 통해 허가되지 않은 액션이 가능한지, 암호화 알고리즘에 취약점이 없는지 등을 분석. 공격자는 분석 결과를 가지고 취약점을 악용한 공격, 방어자는 취약점을 식별하고 대응 방안 강구
- 악성코드 분석 :
악성코드의 원리 및 비정상 행위 분석 및 악성코드 대응 보안 모듈 개발
- 버그수정 :
소프트웨어에 버그가 발생했을 때 원인 파악 밒 수정
- 소프트웨어 사용 제한 기능 제거 :
상용 프로그램 구매자 인증 메커니즘(일련번호 등 )우회
- 신기술 연구 :
새로운 기술을 이용한 소프트웨어가 출시되었을 때나 경쟁 회사 바이너리 파일 분석
- 디지털 포렌식 :
사이버 수사, 데이터 복구

profile
공부...열심히...

0개의 댓글