일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- STCF
- Rr
- sampling theory
- 게임 개발
- MAC
- DP
- 운영체제
- linear difference equation
- 배경 그림
- AINCAA
- CTF
- TSet
- ret2libc
- frequency-domain spectrum analysis
- 유니티
- Race condition
- dtft
- 유스케이스
- Unity #Indie Game
- stride
- DSP
- pdlc
- Double free
- MLFQ
- 메카님
- Security
- RBAC
- dirty cow
- 게임개발
- 언리얼엔진
- Today
- Total
목록보안개론 (26)
다양한 기록
취약한 언어C언어는 굉장히 취약함그런데, 알려진 취약점이 적다고 안전한 언어는 아님그냥 사람들이 관심이 없어서 취약점이 없는 경우가 많음 PHP는 발견되는 취약점이 2019->2020년 크게 줄었는데,PHP가 안전해졌다기 보다는 그냥 PHP의 인기가 식었다고 생각할 수 있음 GO는 2019년->2020년 발견되는 취약점이 늘었는데PHP와 반대로 사람들의 관심이 늘었다고 볼 수 있음 어쨌든 안전한 언어 선택은 중요함성능 신경 안쓰면 파이썬 좋고, 러스트는 성능도 좋고 안전함SDLCPlan &AnalyzeDesignDevelopTestDeployMaintain기획 및 분석 - 설계 - 개발 - 테스트 - 디플로이 - 유지보수보통 설계, 개발 단계에서 약점이 발생 (많은 경우 5:5 비율)그리고 디플로이 단계..
Little endian- 높은 바이트가 높은 주소에 저장- 인텔 x86 Big endian- 낮은 바이트가 높은 주소에 저장- PowerPC, SPARC Data: 0x010203040x1000x1010x1020x103Little Endian0x040x030x020x01Big Endian0x010x020x030x04공격자들은 주소를 조작하기 위해 바이트 오더링 방식을 알아야 함CWE-121: Stack-based Buffer Overflow버퍼는 배열로 이루어진 임시 기억 공간제일 많이 할당되는 부분은 스택(지역변수)* 전역변수면 데이터 영역, malloc으로 할당 받았으면 힙 영역에 존재보통 스택에서 오버플로우가 많이 일어남 Stack-based 버퍼 오버플로우* 그냥 스택 오버플로우에는 재귀함수로 ..
int val[5];배열은 많은 경우 공격 대상이 됨주소 크기는 시스템에 따라 다름32비트 시스템에선 포인터 32비트 차지64비트 시스템에선 포인터 64비트 차지 (실제론 48비트만 씀) val[-3]val[0]에서 -12바이트 전으로 가서 읽으려고 할 것퍼미션이 있으면 접근 가능 typedef int zip_dig[5];zip_dig cmu = {1, 5, 2, 1, 3};zip_dig mit = {0, 2, 1, 3, 9};zip_dig ucb = {9, 4, 7, 2, 0};스택 보호 기법이 있는 경우, 32비트-> 제일 먼저 선언된게 낮은 주소에 들어감ucb [높은주소] .. {9, 4, 7, 2, 0}mit .. {0, 2, 1, 3, 9}cmu [닞은주소] ... {1, 5, 2, 1, 3}c..
아리안 5적재된 위성을 궤도에 전달하기 위한 용도의 로켓64비트 숫자를 16비트에 채우면서 유발 화성 기후 궤도 탐사선록히드 마틴에서는 점화 데이터를 야드 단위로 만들었고,나사는 미터법으로 생각했음 -> 지나치게 낮은 궤도 - 폭발 비트 크기를 제대로 맞추지 않으면 문제가 생길 수 있음 char: -128~127unsigned char: 0~255short: -32768~32767unsigned short: 0~65535 Format Specifier%d - 10진수 정수 (4바이트)%u - 부호없는 정수%i - 아무 정수 (10진수, 8진수, 16진수) %hd - short (2바이트)%hu - unsigned short %hhd - char (1바이트)%hhu - unsigned char %ld - ..
CWE 416이미 해제된 메모리 청크를 가리키는 포인터를 다시 참조함https://github.com/Lagooneng/UseAfterFree GitHub - Lagooneng/UseAfterFree: 간단한 Use After Free 예시간단한 Use After Free 예시. Contribute to Lagooneng/UseAfterFree development by creating an account on GitHub.github.com예시 코드 프로세스에서 의도되지 않은 동작을 유발할 수 있음#include #include struct unicorn_counter {int num;};int main() { struct unicorn_counter *counter; int *run_cal..
glibc Heapmalloc, free 관련 bin - 뚜껑이 달려있는 저장통, 상자, 쓰레기통 ..어쨌든 용량이 다른 여러 종류의 통힙에서 해제가 된 메모리 청크를 관리하기 위해 사용하는 자료구조 힙에서는 청크가 메모리를 할당하거나 해제하는 단위malloc : 메모리를 청크 단위로 할당해줌free : 사용이 끝난 메모리를 해제 해제된 청크는 해당되는(사이즈 맞는) 빈에 저장되는데,각 빈은 서큘러 더블리 링크드 리스트 형태 할당된 청크Meta DataUser DataMeta Data사용자 데이터가 있고, 메타 데이터가 앞 뒤로 있음각각의 청크는 사용자 데이터 뿐만 아니라 관련 메타데이터도 포함함 해제된 청크Chunk SizeAMPFwd PointerBck PointerFD_NextsizeBck_Nex..
#include int main() { int num1 = 10; int arr[5] = {50, 51, 52, 53, 53}; int num2 = 90; int *ptr = arr; printf("addr of num1 = %p\n", &num1); printf("addr of arr[0] = %p\n", &arr[0]); printf("addr of arr[1] = %p\n", &arr[1]); printf("addr of num2 = %p\n", &num2); printf("addr of ptr = %p\n\n", &ptr); printf("arr = %p, %x\n", arr, (unsigned int)arr); printf("ptr = ..
- 루프void main() { float = 0.1; while( x != 1.1 ) { x = x + 0.1; printf("x = %f\n", x); if(x > 3) break; }}컴퓨터 특성 상 실수 연산은 완전히 정확하지 않음.저 루프가 운이 좋으면 끝나겠지만 아니면 무한 루프가 될 것 - 문법 문제int k = 1;int val = 0;while( k = 10 ) { val++; k++;}printf("k = %d, val = %d\n", k, val);k == 10 으로 해야 함 - 메모리 에러char buffer[5] = "Great";int id_seq[3];id_seq[-1] = 123;id_seq[1] = 123;id_seq[2] = 123;id_seq[3] = 12..