ahffkdy13.log
로그인
ahffkdy13.log
로그인
[정보 보안 개론] 코드 보안(프로그램과 코드 보안[프로그램 실행 구조-1])
Jin_Hahha
·
2024년 10월 21일
팔로우
0
0
정보 보안 개론
목록 보기
15/17
시스템 구성과 프로그램 동작
프로그램과 코드 보안
프로그래머는 C, C++, 자바 등의 언어를 사용하여 응용 프로그램이나 운영체제 등을 위한 소스 코드 작성
해커가 프로그래머의 여러 프로그램을 분석하여 악용하는 경우가 많음
웹 해킹도 웹 소스 코드를 악용하기 때문에 가능한 일
해당 파트는 EXE, DLL, COM과 같은 실행 파일 형태로 동작하는 프로그램의 보안 코드 학습
대표적인 공격은 버퍼 오버플로와 포맷 스트링
이해하기 쉬운 개념이 아님
시스템의 구성과 동작 원리를 기본적으로 알아야 하기 때문
하드웨어, 어셈블리어, 소스 코드를 구분하여 이해해야 함
위의 세 개의 영역 중 가장 취약점이 쉽게 발생하는 영역은 소스 코드 영역
하드웨어는 기계적 문제점 이외의 취약점은 잘 발생하지 않음
어셈블리어는 매우 단순한 명령 집합, 그 자체에 보안 취약점이 있다고 할 수 없음
소스 코드에서 문제를 발생시키는 요인은 데이터의 형태와 길이에 대한 불명확한 정의로 집약할 수 있음
시스템 메모리의 구조
시스템 메모리의 기본 구조는 아래와 같음
어떤 프로그램을 동작시키면 프로그램이 동작하기 위한 가상 공간이 메모리에 생성됨
이 메모리 공간은 목적에 따라 상위, 하위 메모리로 나뉨
상위 메모리에는 스택(stack) 할당
하위 메모리에는 힙(heap) 할당
스택 영역과 힙 영역
스택 영역은 프로그램 로직이 동작하기 위한 인자(argument)와 프로세스 상태를 저장하는 데에 사용
힙 영역은 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데에 사용
스택은 레지스터의 임시 저장, 서브루틴 사용 시 복귀 주소(return address) 저장, 서브루틴 인자 전달 등에 사용
상위 주소에서 하위 주소 방향으로 사용
후입선출(Last In First Out, LIFO) 원칙에 따라 나중에 저장된 값을 우선적으로 사용
스택의 동작을 이해하려면 CPU의 임시 메모리인 레지스터에 대해서도 알아야 함
힙은 프로그램이 실행될 때까지 알 수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램 프로세스가 사용할 수 있도록 미리 예약된 메인 메모리의 영역
프로그램에 의해 할당되었다가 회수되는 작용이 되풀이
프로그램이 요구하는 블록의 크기나 요구, 횟수 순서에 일정한 규칙이 없음
힙의 기억 장소는 대개 포인터 변수를 통해 동적으로 할당받고 돌려줌
연결 목록, 나무, 그래프 등의 동적 데이터 구조를 만드는 데 반드시 필요
프로그램 실행 중에 해당 힙 영역이 없어지면 메모리 부족으로 이상 종료됨
레지스터
CPU의 임시 메모리
CPU 연산과 어셈블리어 동작에 필요
80x86 CPU는 프로그램 동작을 위해 아래와 같은 레지스터 제공
ESP, 16비트의 레지스터인 SP(stack pointer)에 E(extended)를 추가한 것
프로세서가 32비트로 커지면서 extended라는 의미를 표현하기 위해 E가 추가된 것
기본 역할은 SP와 동일
EBP, BP에 E를 붙인 것
많은 PC가 64비트 CPU로 바뀌면서 EAX는 RAX로, EBX는 RBX로 바뀜
E 문자열이 R로 바뀌고, 32비트 레지스터가 64비트 레지스터로 바뀌어 레지스터의 크기가 커짐
레지스터의 기본 용도나 의미는 바뀌지 않음
프로그램 실행 구조
위의 프로그램은 C로 작성된 예시 프로그램
main 함수와 덧셈을 하는 서브루틴인 function이 있는 프로그램
C로 작성된 프로그램을 어셈블리어 파일로 전환하면 아래와 같이 출력됨
오른쪽에 붙은 번호순으로 실행됨
앞 부분은 main 함수에 대한 내용
중반부터는 function 함수에 대한 내용
push, add, mov 옆에 있는 l은 피연산자의 크기를 나타냄
l(long)은 32비트, w(word)는 16비트, b(byte)는 8비트를 의미
보통 mov와 movw가 같음
pushl %ebp
처음 main 함수가 시작되면 main 함수의 EBP(extended base pointer) 레지스터 값을 스택에 저장
EBP 레지스터에는 스택에서 현재 호출되어 사용되는 함수의 시작 주소 값이 저장되어 있음
함수 실행과 관련된 지역변수 등을 참조할 때 기준이 됨
스택에 저장된 EBP는 SFP(saved frame pointer)라고 함
위의 어셈블리어 코드에는 나타나지 않았지만 EBP 바로 앞에 RET(Return address)가 저장됨
RET에는 함수 종료 시 점프할 주소 값이 저장됨
Jin_Hahha
팔로우
이전 포스트
[정보 보안 개론] 웹 보안(민감한 데이터 노출)
다음 포스트
[정보 보안 개론] 코드 보안(프로그램 실행 구조-2, 셸-1)
0개의 댓글
댓글 작성