보안솔루션 관점에서 이야기하는건 어짜피 병림픽이니, 제하고

외부 프로그램들은 항상 고정위치의 값을 변조하고나 읽어가서 악용하는 경우가 많다.

메모리풀을 만들때, 메쏘드에 얼록외에 추가로 보호얼록 같은걸 만들어서,
기존 풀의 랜덤한 영역에 할당해주는 것도 도움이 되지 않을까 싶다.
리눅스에는 os가 지원하는 기능으로 알고 있다.

추가로 변수 완전하게 추상화가 가능하면, 실제 저장 영역은 바이트 단위로 쪼개서 랜덤한 영역에 분포시키고, 오버라이드된 오퍼레이터 ( = ) 에서 합쳐서 돌려주는 식으로 구현하는 것도 괞찮을 듯 하다.

이올린에 북마크하기
2012/01/27 09:34 2012/01/27 09:34
memory read 방어 :: 2012/01/27 09:34 공부/etc

기존 코드 프로그램 으로 프로젝트 생성 시,

콘솔 응용프로그램 작성된걸,
win32 응용프로그램으로 로드하면 위와 같은 에러가 납니다.

msvcrtd.lib(crtexew.obj) : error LNK2019: _WinMain@16 외부 기호(_WinMainCRTStartup 함수에서 참조)

바꾸세요. ㅇㅇ

이올린에 북마크하기
2011/08/09 16:34 2011/08/09 16:34

TCP는 신뢰성을 가진 통신 프로토콜이다.
이런 신뢰성 문제중에 하나가 Reordering이 있는데,
이는 패킷이 어떤 알수없는 사정에의해 순서가 뒤바껴서 온경우를 말한다.

자세히 설명하면
데이터를 전송혹은 다운로드 받을 때 ack가 고정이되고, seq를 통해서 현재 위치를 가늠하게 되는데,
이때 seq + len 으로 추정된 다음 seq의 패킷이 오지 않고, 다른 패킷이 왔을 때를 말한다.

크기 1 짜리 패킷 5개를 보냈을 때
1 -> 2 -> 3 -> 4 -> 5 이런식으로 seq를 확인하여 패킷을 합치면 된다.
1 -> 3 -> 2 -> 4 -> 5 로 왔을 때는?
이때 reordering이 발생하는데 WireShark에서는 TCP Out-of-Order라고 표시해준다.
TCP는 3이 도착했을 때 3이 현재 올바른 순서로 온것이 아닌 것으로 파악하고 ,
3을 버퍼에 쌓아둔다. 그리고 2가 도착했을 때 2를 사용하고, 버퍼에 쌓아둔 3을 사용하게 되는것.

이런 TCP Reordering은 보통 3개까지만 저장하되 이를 넘어가면
loss data로 간주하여 재전송을 요청하게 된다.

이올린에 북마크하기
2011/08/05 18:01 2011/08/05 18:01
openclose