시큐어코딩 10

시큐어코딩 (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

시큐어코딩 (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

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

이번 포스트에서는 수업에서 제공해주신 CH 01 자료를 바탕으로 중요하다고 생각되는 내용을 정리해보고자 한다. 1. 소프트웨어 기반 사이버 기능에서는 신뢰가 더 중요하다 Cyber Infrastructure(사이버 인프라) 예시 Control SystemsSCADA(감시 제어 및 데이터 수집 시스템)PCS(전력을 배터리에 저장 또는 방출하기 위해 전기의 특성을 변환해 주는 시스템)DCS(분산 제어 시스템)Vehicle SystemsMedicalServicesManaged SecurityInformation ServicesSoftwareFinancial SystemHuman ResourceHardwareDatabase ServersNetworking EquipmentInternetDomain Name Sy..

시큐어코딩 2025.04.13

시큐어 코딩 (1) - CH 00

이번 포스트에서는 수업에서 제공해주신 ch00 자료를 바탕으로 중요하다고 생각되는 내용을 정리해보고자 한다. 1. 4차산업혁명 시대의 위협 : 소프트웨어 버그/에러/오류 (일반적인) 버그정상적 작동 중 설계/코딩 등의 잘못으로 발생하는 버그SW 품질, 안전성, 신뢰성 등 저하취약점정상적 작동 중 공격자의 의도로 발생하는 보안 약점사이버 공격에 사용2. 소프트웨어 안전성(safety) 사용 정의 : 시스템이 재앙(인명의 손상, 시스템의 파괴 등)과 같은 실패 없이 동작하는 능력 SW 신뢰성 != SW 안정성 문제 발생을 일으키는 것을 파악 예를들어, 어떠한 하드웨어의 내구성 문제로 유지보수 및 물품 교체가 필요하다고 가정해보자 물품 교체가 필요한 시기에 사고가 발생할 것으로 예상될 수 있다. 또는 운영시..

시큐어코딩 2025.04.13