secure (4) 썸네일형 리스트형 [CERT C/표현식] (1) 연산자 우선순위의 중요성 의미 연산자 우선순위란, C 언어에서 사용되는 수 많은 연산자들의 연산 순서를 의미한다. 보통 +, -보다 *, / 가 우선이고 비트 연산자 우선순위 정도까지 생각을 하는 분이 많을 것이라고 생각하는데 우리가 코드에서 보는 모든 기호에 우선순위가 부여되어있고 그 우선순위를 이해하다보면 포인터, 배열 등의 개념의 이해에 큰 도움이 될 것이다. 동작 방식 순위 명칭 연산자 결합방향 1 1차 연산자 () [] . -> -> 2 단항 연산자 + - ! ~ (type) sizeof ++ -- & * 4 가법 연산자 + - 5 Shift 연산자 > 6 관계 연산자 = 7 등가 연산자 == != 8 bit 곱 연산자 & 9 bit 차 연산자 ^ 10 bit 합 연산자 | 11 논리곱 연산자 && 12 논리합 .. [CERT C/전처리기] (3) 복수 구문의 매크로 취약성 의미 매크로를 복수 구문으로 사용할 때는 "\" 문자를 이용해서 작성할 수 있다. #define SWAT(X,Y) \ tmp = x; \ x = y;\ y = tmp; 동작 방식 간단한 한 가지 구문보다 많은 구문을 매크로로 사용할 수 있다. 문제 코드 1. 헤더 파일에 항상 인클루전 가드를 둬라 출력을 예상해보기 #define SWAP(x,y) \ tmp = x; \ x = y;\ y = tmp; int main() { int x = 3, y = 3; if(x != 2) SWAP(x,y); return 0; } if 문에서 원하는 동작을 하지 않고 오류가 나게 됩니다. 취약점 분석 및 해결 코드 1 분석 : if 문에서 tmp = x; 구문만 실행이 되고 ( 물론, tmp에서 오류가 나게 됩니다. ) .. [CERT C/전처리기] (1) 매크로 함수의 취약성 의미 매크로 함수란, #define 지시문에 인수로 함수의 정의를 전달하여서 함수처럼 동작하는 매크로이다. 동작 방식 매크로 함수는 인수를 컴파일 이전에 미리 치환하는 동작 방식이다. 문제 코드 1. 인자에 대한 연산이 발생시키는 오류 출력을 예상해보기 #include #define CALC(x) ((x) * (x)) int main() { int a = 2; int b = CALC(++a); printf("%d\n", b); return 0; } 정답은 "전처리기에 따라 달라진다" 입니다. 취약점 분석 및 해결 코드 1 분석 : 사용자가 a를 ++로 3인 상태를 넘겨서 3 * 3 = 9인 값을 원했다면 원하는 답이 나오지 않을 가능성이 높습니다. 3 * 4 = 12가 나올 수도 있고 4 * 4 = 16.. What is CERT C 의미 CERT C Coding Standard는 SW 개발자들을 한 가이드라인의 집합이자 C 언어의 보안 취약성 및 노출 등을 방지하기 위한 가이드라인입니다. Why do CERT C? C 언어는 컴퓨터 공학을 이수하고자 할 때 반드시 거쳐야 하는 언어입니다. 그래서 처음 컴퓨터 공학을 시작할 때 배우게 되는 이 언어는 습관처럼 코드를 작성하게 되고 프로그램의 동작 관점에서 프로그래밍을 하게 되는 사람이 많습니다. 물론, 저 또한 오랫동안 그래 왔다고 생각합니다. 또한 직접 메모리에 접근하고 바로 컴파일이 되는 언어이고 링킹 과정을 생각하고 프로그램을 만들어야 하는 언어이기 때문에 메모리 누수 이외에도 많은 취약성을 알고 프로그래밍을 해야 합니다. 저는 사실 이러한 취약성들을 알아가는 과정에 "빠르게 변.. 이전 1 다음