| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 게임 개발
- rpc
- 게임개발
- unity
- 언리얼엔진
- ability task
- gas
- Multiplay
- animation
- stride
- linear regression
- MAC
- widget
- C++
- 언리얼 엔진
- local prediction
- Unreal Engine
- UI
- 보안
- CTF
- os
- Replication
- 유니티
- Aegis
- gameplay ability system
- gameplay tag
- listen server
- attribute
- gameplay effect
- photon fusion2
- Today
- Total
Replicated
구현 단계 개발 보안 - Secure Coding, 테스트, 분석 본문
Secure Coding 이란?
- 소프트웨어 개발 과정에서 보안 취약점을 사전에 방지하기 위해 안전한 코딩 기법과 원칙을 적용하는 것
- 소프트웨어가 해킹, 데이터 유출, 악성 코드 주입 등의 위협으로부터 안전하게 보호될 수 있도록 하는 것을 목표
Secure Coding 목적
보안 취약점 예방
- 소프트웨어 개발 초기 단계부터 보안을 고려하여 취약점이 발생할 가능성을 줄임
데이터 보호
- 민감한 정보(개인 정보, 금융 데이터 등)가 외부로 유출되지 않도록 보호
공격 방어
- SQL 주입, XSS등과 같은 해킹 공격을 방어
신뢰성 향상
- 안전한 코드는 소프트웨어의 안정성과 신뢰성을 높여 사용자 신뢰를 구축
Secure Coding 주요 원칙
입력 데이터 검증과 무결성
- 모든 사용자 입력은 신뢰할 수 없다고 가정하고 반드시 검증
- 허용된 문자, 길이, 형식만 받아들이도록 화이트 리스트 방식으로 검증
- SQL 인젝션, XSS 등 공격을 방지하기 위해 특수문자 이스케이프 처리
인증과 접근 제어
- 최소 권한의 원칙을 적용하여 필요한 최소한의 권한만 부여
- 중요 기능에 대해 접근 권한을 세밀하게 통제
- 세션 관리를 안전하게 구현하고 세션 하이재킹 방지
암호화와 키 관리
- 중요 데이터는 반드시 암호화하여 저장 및 전송
- 안전한 암호화 알고리즘과 충분한 키 길이 사용
- 암호화 키를 안전하게 보관하고 주기적으로 갱신
안전한 통신
- HTTPS 등 암호화된 통신 채널 사용
- 중요 데이터 전송 시 추가 암호화 적용
안전한 메모리 관리
- 버퍼 오버플로우 방지를 위한 경계 검사
- 사용이 끝난 메모리는 즉시 해제
- 중요 데이터가 담긴 메모리는 삭제 전 덮어쓰기
코드 난독화
- 공격자의 공격 비용을 높임
상대적으로 안전한 개발 언어 사용
- 메모리 관련 보안 취약성은 대부분 수동 메모리 관리와 내장 메모리 검사가 없는 프로그래밍 언러에서 발생
- 시스템 프로그래밍 기능이 필요하지 않다면 C/C++ 외 다른 개발 언어 검토
- 보안성이 강화된 API 사용 (~~~_s 함수)
서드 파티 모듈 보안성 검토
- 사용하는 라이브러리 및 프레임워크 최신 버전 검증
- 사용하는 라이브러리 및 프레임워크 취약성 항목 검증
Secure Coding 표준 및 모범 사례
CERT (C)
- 미국 카네기멜론 대학 CERT에서 제정한 C언어 시큐어 코딩 표준
- 버퍼 오버플로우, 포맷스트링 등 메모리 취약점 방지 규칙 제시
- 선언, 초기화, 표현식, 포인터 등 10개 주요 영역별 가이드라인 제공
- 개발 언어별 코딩 권장 사항 제공
OWASP (Open Wep Application Security Project)
- 웹 어플리케이션 보안을 위한 코딩 가이드라인
- 입력값 검증, 인증/인가, 세션 관리 등 핵심 보안 영역 포함
- 실제 구현 사례와 체크리스트 제공
CWE (Common Weakness Enumeration)
- MITRE가 관리하는 소프트웨어 보안 취약점 분류 체계
- 버퍼 오버플로우, SQL 인젝션 등 주요 보안 약점 세부 분류
- CVE와 연계되어 실제 취약점 사례 참고 가능
MISRA(Motor Industry Software Reliability Association) C
- 자동차 산업 중심의 C 언어 코딩 표준
- C언어로 작성된 임베디드 시스템의 코드 안정성, 호환성, 신뢰성 확보를 위한 규칙 제시 목적
- 우주/항공, 의료장비, 국방, 철도 등 다양한 산업한 Best Practice
NIST(National Institute of Standards and Technology) 보안 코딩 표준
- 미국 표준 기술 연구소에서 제시한 보안 코딩 가이드라인
- 입력 데이터 검증, 메모리 관리, 에러 처리, 보안 기능 등에 대한 영역에 가이드라인 제공
- 규제 준수 등 법적 요구사항 충족, 감사 대응 용이, 컴플라이언스 관리 효율성
소프트웨어 테스트 유형
Types of Testing
|- Manual Testing
| |- White Box Testing
| |- Black Box Testing
| | | - Functional Testing
| | | |- Unit Testing
| | | |- Integration Testing
| | | | |- Incremental Testing
| | | | | |- Top-Down
| | | | | |- Bottom-Up
| | | | |- Non-Incremental Testing
| | | |- System Testing
| | | - Non-Functional Testing
| | | |- Performance Testing
| | | | |- Load Testing
| | | | |- Stress Testing
| | | | |- Scalability Testing
| | | | | |- Stability Testing
| | | |- Usability Testing
| | | |- Compatibility Testing
| |- Grey Box Testing
|- Automation Testing
Manual Testing
- 사람이 직접 수행하는 테스트
Non-Manual Testing
- 도구와 스크립트를 사용한 자동화된 테스트
White Box Testing: 내부 로직을 알고 수행하는 테스트
Black Box Testing: 내부 구조를 모르고 입출력만으로 테스트
Grey Box Testing: 제한된 내부 지식을 바탕으로 수행하는 테스트
Functional Testing (기능 테스트)
- Unit Testing: 개별 컴포넌트, 모듈 테스트
- Integration Testing: 여러 모듈이 결합된 상태에서의 테스트
- Incremental Testing (증분 테스트): 점진적으로 모듈을 추가하면서 테스트 (하향식, 상향식)
- Non-Incremental Testing (비증분 테스트): 모든 모듈을 한 번에 통합하여 테스트
- System Testing: 전체 시스템을 이용한 완전한 테스트
Non-Functional Testing (비기능 테스트)
- Performance Testing (성능 테스트): 시스템의 응답성과 안정성 테스트
- Load Testing (부하 테스트): 예상 부하 상태에서 성능 측정
- Stress Testing: 극한 상황에서의 시스템 안정성 검증
- Scalability Testing(확장성 테스트): 시스템의 확장 가능성 테스트
- Stability Testing(안정성 테스트): 장기간 운영 시의 시스템 안정성 검증
- Usability Testing(사용성 테스트): 사용자 친화성과 접근성 테스트
- Compatibility Testing(호환성 테스트): 다양한 환경에서의 작동 검증
소프트웨어 분석
- 소프트웨어 품질, 정확성, 신뢰성 평가 및 개선을 위해 소프트웨어를 체계적으로 조사하고 검증하는 과정
- 소프트웨어 개발 생명주기 전반에 걸쳐 수행
- 소프트웨어 구조, 동작, 특성을 이해하고 이를 바탕으로 잠재적인 문제점을 식별하고 해결방안을 제시하는 것이 목적
- 안정성, 유지보수 용이성, 성능 최적화, 보안성 강화
- 정적 분석(Static Analysis)과 동적 분석(Dynamic Analysis)로 구분
정적 분석(Static Analysis)
- 프로그램을 실행하지 않고 소스코드를 분석하는 방법
- 컴파일 시점에 발견 가능한 오류 검출
- 전체 코드를 기반으로 포괄적인 분석이 가능
- White Box Testing의 한 종류
정적 분석 유형
제어 흐름 분석(Control Flow Analysis)
- 프로그램 실행 경로를 그래프 형태로 표현하여 분석
- 프로그램 실행 경로 추적
- 도달 불가능한 코드 (Dead Code) 검출
- 무한 루프 가능성 검사
- 조건문과 반복문의 논리적 오류 검출
- 예외처리 누락 확인
데이터 흐름 분석(Data Flow Analysis)
- 변수의 정의와 사용 관계 추적
- 초기화되지 않은 변수 사용 검출
- 변수 값 범위 분석
- 널 포인터 참조 가능성 검사
- 메모리 누수 가능성 분석
- 자원 할당과 해제 패턴 검사
타입 검사(Type Checking)
- 변수와 함수의 타입 호환성 검증
- 암시적 타입 변환의 안전성 검사
- 함수 매개변수 타입 정합성 확인
- 반환값 타입 검증
구문 분석(Syntax Analysis)
- 코드의 문법적 정합성 검증
- 코딩 스타일 가이드라인 준수 여부 확인
의미 분석(Semantic Analysis)
- 코드의 논리적 의미와 의도를 분석
- 정수와 문자열 덧셈, 0으로 나누는 연산 등 코드의 논리적 오류 분석
동적 분석(Dynamic Analysis)
- 프로그램을 실제로 실행하면서 분석하는 기법
- 다양한 입출력 데이터와 사용자 상호작용의 변화들을 점검
- 프로그램의 동작과 성능을 실시간으로 모니터링
동적 분석 유형
- 행위 탐지 기법: 프로그램이 실행될 때 나타나는 동작과 패턴을 관찰 및 분석
- 샌드박스 기법: 가상화 환경에서 직접 실행을 통해 이상 현상을 분석
- 모의 해킹: 화이트 해커가 실제로 프로그램을 분석하면서 취약점 진단
'학부 > 소프트웨어 보안개발방법론' 카테고리의 다른 글
| 설계 단계 보안 강화 활동 (0) | 2025.06.12 |
|---|---|
| 소프트웨어 공급망 공격과 SBOM, CC 인증 (0) | 2025.06.12 |
| ZTA와 경계 기반 보안 모델 (0) | 2025.06.12 |
| 보안 위협 완화 전략 (0) | 2025.06.12 |
| DevSecOps, 역할 별 보안 활동, Best Practices (0) | 2025.06.12 |