전체 글 276

시큐어코딩 (12) - CH 02-8 Listing

이번 포스트에서는 CH 02의 나머지 내용을 정리해보고자 한다. 1. Black Listing 기본적으로 입력 문자열에 대한 처리를 승인처리,미리 부적절한 입력에 대한 List를 만들고, 해당 값이라면 거부처리실시간 문제 발생 업데이트에 대한 한계가 존재 2. White Listing 기본적으로 입력 문자열에 대한 처리를 거부처리미리 적절한 입력에 대한 List를 만들고, 해당 값이라면 승인처리매우 엄격하고, 유연성이 떨어지는 한계가 존재 3. Runtime bounds checkers일부 C 컴파일러에는 런타임 배열 경계 검사 기능이 있다.이것으로 인해 속도가 매우 느려진다 동적 라이브러리 - C 라이브러리 함수의 인수 경계를 가로채서 검사한다프레임 포인터와 반환 주소가 덮어쓰이지 않도록 한다4. St..

시큐어코딩 2025.04.14

시큐어코딩 (11) - CH 02-7

1. Mitigation Strategies(완화 전략) 다음과 같은 전략을 포함합니다.버퍼 오버플로 발생 방지버퍼 오버플로 감지 및 장애 악용 방지를 위한 안전한 복구예방 전략은 다음과 같다정적으로 공간 할당동적으로 공간 할당 2. Static approach정적으로 할당된 버퍼 고정 크기 버퍼를 가정해보자버퍼가 가득 찬 후에는 데이터를 추가할 수 없다.정적 접근방식은 초과 데이터를 삭제하므로 실제 프로그램 데이터가 손실될 수 있다따라서 결과 문자열은 완전히 검증되어야 한다.버퍼 오버플로는 종종 무제한 문자열 또는 메모리 복사로 인해 발생한다버퍼 오버플로는 입력 데이터가 저장된 가장 작은 버퍼 크기를 초과하지 않도록 함으로써 방지할 수 있다.예를 들어 아래와 코드같이 if문을 활용한 검사 코드가 있다...

시큐어코딩 2025.04.14

시큐어코딩 (10) - CH 02-6 Arc injection(return-into-libc)

이번 포스트에서는 Arc injection(아크 주입)에 대해 알아보고자 한다.  1. Arc injection이란?정의 : 지정한 프로세스가 강제로 동작하도록 하는 것,예를 들어 코드의 흐름 강제 조정, 원복 가능 아크 인젝션은 프로그램 메모리 공간에 이미 존재하는 코드로 제어권을 이전한다악용은 프로그램의 제어 흐름 그래프에 새로운 아크(제어 흐름 전송)를 삽입하는 방식을 말한다기존 함수 system() 또는 exec()의 주소를 설치할 수 있으며, 이 함수는 로컬 시슽메에서 프로그램을 실행하는데 사용할 수 있다이 기술을 사용하면 훨씬 더 정교한 공격이 가능하다2. Vulnerable Program(취약 프로그램) 취약 코드의 예시를 살펴보자#include int get_buff(char *user_i..

시큐어코딩 2025.04.13

시큐어코딩 (9) - CH 02-5 Code Injection

1. code Injection(코드 삽입) 공격자는 악성 인수를 생성한다공격자가 제공한 악성 코드에 대한 포인터가 포함된 특수하게 조작된 문자열함수가 반환되면 제어권이 악성 코드로 이전된다삽입된 코드는 함수가 반환될 때 취약한 프로그램의 권한으로 실행된다루트 또는 기타 상승된 권한으로 실행되는 프로그램은 일반적으로 공격 대상이 된다2. Malicious Argument(악성 인수)MA의 특징취약한 프로그램에서 합법적인 입력으로 받아들여야 한다인수는 다른 제어 가능한 입력과 함께 취약한 코드 경로를 실행해야 한다인수는 제어권이 악성 코드로 전달되기 전에 프로그램을 비정상적으로 죵료시켜서는 안된다3. ./vulprog   우리가 작성했던 비밀번호 가져오기 프로그램은 다음 이진 데이터 파일을 입력으로 제공하..

시큐어코딩 2025.04.13

시큐어코딩 (8) - CH 02-4 버퍼 오버플로우란 무엇일까?

이번 포스트에서는 버퍼 오버플로우에 대해 학습해보고자 한다 1. 버퍼 오버플로우란..  데이터가 특정 데이터 구조에 할당된 메모리 경계 외부에 기록될 때 발생한다버퍼 경계가 무시되고 확인되지 않을 때 발생버퍼 오버플로우는 다음을 수정하는데 악용될 수 있다변수데이터 포인터함수 포인터스택의 반환 주소2. Smashging tthe Stack(스택을 부수다?) 이 내용은 빈도와 잠재적 결과 때문에 중요한 취약성 유형이다 이것은 버퍼 오버플로가 실행 스택에 할당된 메모리의 데이터를 덮어쓸 때 발생한다성공적인 악용은 스택의 반환 주소를 덮어써서 대상 컴퓨터에서 임의의 코드를 실행할 수 있도록 한다3. 버퍼 오버플로우의 코드 예제 예를 들어 문자열을 비교하는 아래의 코드가 있다고 가정해보자char IsPasswor..

시큐어코딩 2025.04.13

시큐어코딩 (7) - CH 02-3 프로그램은 메모리에 어떻게 저장되는가

이번 포스트에서는 우리가 실행하는 프로그램이 어떻게 메모리에 저장되고 실행되는지에 대해 살펴보고자 한다 1. Process Memory Organization(프로세스 메모리 조직)프로그램 : 명령어들의 집합프로세스 : CPU에 의해 실행중인 프로그램 Organization은 다음에 따라 달라진다 OSCompilerLinkerLoader2. x86 Registers 프로세스는 CPU에 의해 실행된다.아래의 이미지는 32bit환경이다EIP : Extended Instructuin Pointer (확장 명령어 포인터)ESP: Extended Stack Pointer (확장 스택 포인터)EBP: Extended Base Pointer (확장 베이스 포인터)  3. Program Stacks 프로그램 스택은 프..

시큐어코딩 2025.04.13

시큐어코딩 (6) - CH 02-2 일반적인 오류 코드로 살펴보기

이번 포스트에서는 바로 지난 포스트인 https://vitamin3000.tistory.com/280 시큐어코딩 (5) - CH 02-1 String Vulnerabilities(문자열 취약점)이번 포스트에서는 문자열 취약점에 대해 알아보고자 한다.  목차는 다음과 같다. Issues컴파일러문자열배경 및 일반적인 문제일반적인 문자열 조작 오류문자열 취약점완화 전략1. 컴파일러 우vitamin3000.tistory.com에서 살펴본 일반적인 오류에 대해 코드로 직접 살펴보려 한다. 1. Unbounded String Copies데이터가 무제한 소스에서 고정 길이 문자 배열로 복사될 때 오류 발생 int main(void) { char Password[80]; puts("Enter 8 character..

시큐어코딩 2025.04.13

시큐어코딩 (5) - CH 02-1 String Vulnerabilities(문자열 취약점)

이번 포스트에서는 문자열 취약점에 대해 알아보고자 한다.  목차는 다음과 같다. Issues컴파일러문자열배경 및 일반적인 문제일반적인 문자열 조작 오류문자열 취약점완화 전략1. 컴파일러 우선, 컴파일러는 다음의 절차를 수행한다   최종 사용자와 소프트웨어 시스템 간에 교환되는 대부분의 데이터는 아래 항목을 포함한다명령줄 인수환경 변수콘솔 입력소프트웨어 취약점과 악용은 다음 항목의 취약점으로 인해 발생한다문자열 표현문자열 관리문자열 조작2. C-Style Strings 문자열은 소프트웨어 엔지니어링의 기본 개념이지만 C나 C++에 내장된 유형은 아니다. C-Style 문자열은 널 문자를 포함하여 끝난는 연속적인 문자 시퀀스로 구성된다문자열 포인터는 해당 문자열의 시작문자(h)를 가리킨다문자열 길이는 널 문..

시큐어코딩 2025.04.13

시큐어코딩 (4) - CH 01-3

1. 소프트웨어 보안과 시큐어 코딩포인터 공격제어 데이터 공격non-control 공격경쟁 조건(자원 독점) 공격검사 시점, 사용 시점프로그램과 프로그램 또는 사용자 사이의 상호작용파일 변조메모리 변조데드락서로 공유되는 , 참조되는 자원을 양보안해서 시스템 실행을 못함제어 데이터(프로그램 실행 흐름) 공격간접 분기에 사용되는 데이터에 침입자가 원하는 주소를 기록스택 프레임의 반환 주소(PC Program Count)toc, tou 실행흐름 여러개로 사용 보장이 안됨java에서는 Sync(동기화)로 해결함수 포인터라이브러리와 같은 공유 객체 연결 포인터non-control 공격환경 설정 데이터사용자 입력사용자 신분 데이터분기 결정 데이터2. C 시큐어 코딩 : C언어의 문제점취약성 연관 C언어 특성약한 타..

시큐어코딩 2025.04.13

시큐어 코딩 (3) - CH 01-2

1. CWE 항목식별 정보기술 정보범위와 한계 정보처방 정보개선 정보2.  CVSS컴퓨터 시스템 보안 취약성의 심각성을 평가하기 위한 산업체 표준취약점 수정을 위한 우선순위 제공시스템에서 발견된 취약성의 심각성 평가(기준 제공) 3. Software Security Problem 방어 프로그래밍은 충분하지 않다 Security Features != Secure Features 전역, 정해지지 않은 값을 입력 Software Quality and Soft Security 4. Testing Specified vs Unspecified Features Testring단위 모듈, 개인, 통합.. 테스팅은 한계가 존재한다기능적 결함, 의도한 대로 동작, 일정 수준 만족정해진 값을 입력퍼징랜덤값을 넣어 테스팅실행..

시큐어코딩 2025.04.13