assert DCL-03. 상수 수식의 값을 테스트할 때는 static assertion을 사용해라 dynamic assert: assert() dynamic assert(동적 assert) 기능으로 assert() 함수가 있다. assertion 은 취약성이 될 수 있는 소프트웨어의 결점을 찾아 제거하는데 사용되는 효과적인 진단 도구이다. 다만, assert() 을 사용하는 것은 몇 가지 제약이 존재한다. 일반적인 assertion 도구는 프로그램이 구동 중에 동작하므로 런타임 오버헤드 존재 일반적인 assertion 도구의 마지막 동작은 abort()를 호출하는
FILE I/O fopen(), 파일 생성에 대해 특정 조건 가정X C99 fopen()은 존재하는 파일을 열거나 새로 생성할 때 사용한다. 하지만 이 함수는 읽기 모드, 새로운 파일 생성했는가? 구별 하지 않는다!! 덮어쓰기, 의도하지 않은 파일 접근 가능성 POSIX open() 함수 사용 권장 open() 열린 파일에 remove() 주의 열린파일에 대해 remove()사용은 구현마다 다르다. 보안 문제 유발 **1. 부적절한 코
string 문자열은 char 사용 char, signed char, unsigned char를 문자 타입이라고 한다. 컴파일러는 char가 signed char, unsigned char와 동일한 범위와 표기를 갖도록 정의한다. 하지만 둘 중 하나와 같다고 해도 char는 이 둘과 분리된 타입이며, 서로 호환도 되지 않는다. 따라서 표준 문자열 처리 함수들과 호환성을 위해 문자 데이터는 char 사용 stdin 입력 {,f,v}scanf 피할 것 scanf, fscanf, vscanf
floating point 문제 floating point 정밀도는 Arch, compiler 최적화 레벨에 따라 다르다. ARCH마다 다른 결과 아래의 코드는 시스템에 따라 다른 결과 출력 64bit Linux, gcc 4.1 version result = 0.33333334326744079589843750000000000000000000000000 64bit Windows, visual studio 2012 result = 0.33333334326744080000000000000000000000000000000000 **compiler 최적화 레벨에 따라
정수 변환 규칙 Misra Dir 4.6 기본 수치 유형 대신 크기와 부호가 표시된 typedef를 사용해야한다. C99에서 stdint.h에서 제공하는 유형을 사용해야 한다. 정수 변환 규칙, Promotion explicit convsersion: 변환 연산자를 사용한 변환 implicit convsersion: 특정 연산에 의한 변환 int보다 작은 정수 타입은 연산이 수행될 때!! int, unsigned int로 변환 오버플로로 인한 산술 연산 에러 방지하기 위함 bit 수가 많은 타입이 높은 순위 가진다. 각기 다른 **si
고정적인 값 = symbolic const 코드 상에서 literal 을 사용할 경우, 가독성이 떨어질 수 있다. 가급적 literal 을 직접 사용하기 보다는 symbolic 상수을 사용해 적절한 이름을 붙여 코드의 의도를 명확히 해야한다. const 객체 enum 객체형 매크로 방식|평가 시점|메모리 소비 유무|디버깅 시 심볼|타입 체크|
secure coding 개념 안전한 소프트웨어 개발을 위해 소스 코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거, 보안 고려해 기능을 설계 및 구현 필요성 각 기관에서의 필요성 제고 릴리즈 이전 SW 취약점을 50% 줄이면, 침해사고 대응 비용 75% 감소 - Gartner 보안 취약점의 92%는 네트워크가 아닌 애플리케이션에서 발견 - NIST 릴리즈 이후 오류 수정은 약 $30,000 소요, 하지만 개발 중 오류 수정은 약 $5,000면 충분 -NIST 릴리즈 이후 오류를 수정하고자 할 경우 설계 단계보다 비용 100배 증가 이러한 이유로 미국의 경우 국토안보부(DHS)를 중심으로 시큐어코딩을 포함한 SW 개발 전과정(설계, 구현, 시험 등)에 대한 보안활동 연구를 활발히 진행하고 있다. 국내의 경우 2009년 부터 전자정부 서비스 개발단계