분류 전체보기
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
2016.12.19`` LD_PRELOAD``는 prefix로 `` LD_``가 붙은, ld.so에 속하는 환경변수로,windows의 `` AppInit_Dlls`` 레지스트리와 비슷한 역할을 한다.`` LD_PRELOAD``에 설정된 shared object는 libc를 비롯한 다른 모든 shared object보다 먼저 로딩된다.`` LD_PRELOAD``에 설정된 shared library의 함수 중에 이후 로딩된 libc의 함수 이름과 동일한 함수가 있다면 먼저 로딩된( = `` LD_PRELOAD``에 설정된) shared library의 함수를 호출하게 된다. 그래서 결과적으로 보면 자동으로 후킹을 수행하는 것과 같다. 타인 소유 파일에도 동작한다.secure-execution mode로 실행되면 제약이 걸린다..
ptrace - Linux injection ( code injection / so injection )
ptrace - Linux injection ( code injection / so injection )
2016.12.12리눅스는 윈도우의 ``c CreateRemoteThread()``같은 API를 제공하지 않기 때문에, injection에 ``c ptrace()``를 이용한다.2016/12/25 - [System/LINUX & UNIX] - ptrace 타인의 권한으로 실행된 프로세스에는 TRACEME와 ATTACH가 불가능하기 때문에 동작하지 않는다.타인 소유 파일을 내가 실행하는 경우는 동작한다. code injection특정 실행파일에서 원하는 정보를 추출하거나 원하는 동작을 하게 하는 데 유용하게 쓰일 수 있다.code injection을 통해 target 프로세스가 ``c system("echo Code inject");``을 호출하게 해 "Code inject" 문자열을 출력하도록 해보았다. Ubuntu 15..
.s 파일 수정
.s 파일 수정
2016.12.10자주 사용하는 shellcode를 -S 옵션으로 컴파일 한 결과 파일( inlineasm.s )`` __volatile__``을 사용했기 때문에 입력한 어셈블리 그대로 컴파일 되었다.```c .file "inlineasm.c" .version "01.01"gcc2_compiled.:.text .align 4.globl main .type main,@functionmain: pushl %ebp movl %esp,%ebp#APP push $0x0 push $0x0068732f push $0x6e69622f mov %esp, %ebx push $0x0 push %ebx mov %esp, %ecx mov $0x0, %edx mov $0xb, %eax int $0x80 #NO_APP.L1: leave ret.Lf..
GOT( Global Offset Table ) Layout과 link_map structure
GOT( Global Offset Table ) Layout과 link_map structure
2016.12.09ELF 파일의 Section header를 조사하여 got의 위치를 얻을 수 있다.위 파일의 got 크기는 0x20이므로 32byte임을 알 수 있다. `` Partial-RELRO``(default) 바이너리는 .got.plt를 사용한다. 이 경우 .got는 4byte에 0만 들어있다.`` Full-RELRO`` 옵션으로 컴파일된 바이너리는 .got를 사용한다. 이 경우 .got.plt가 아예 없다.따로 옵션을 주지 않으면 partial-RELRO로 컴파일되므로, .got.plt( 0x0804a000 )가 got라고 생각하면 된다. * 구식 OS는 .got.plt 없이 그냥 .got가 .got.plt를 포함하고 있는 경우도 있다. got[0], 첫번째 entry는 이 module(실행 파일)의 dyna..
Ethernet IEEE 802.3
Ethernet IEEE 802.3
2016.12.03IEEE 802.3( Ethernet )Data-link layer의 MAC sublayer와 Physical layer를 정의하는 protocol CharacteristicsConnectionlessUnreliable따라서 2개의 L2 sublayer 중 p-to-p communication에 관여하는 LLC sublayer에서 Flow control을 하지 않는다.CRC가 있으니 수신 측에서 error correction한다. ( FEC, Forward error correction )error correction 하지만 ARQ(=BEC)가 아닌 FEC이고, Flow control 하지 않으니 당연히 ACK도 없다.LLC identifier( 802.2 )대신 MAC에서 EtherType을 사용하니 ..
FSC level3
FSC level3
2016.11.28문자열 check 루틴이 어딘지는 알겠는데,어디 저장되는지 찾아야함. 204 200 4 이렇게 ebx+8이 가리키는 곳에 더하는데이것들은 훼이크고 **(ebx+8)-4하면 문자열 있는 193A84나옴.-4나오는 시점이 진짜임. 거서부터 문자열처리를 시작한다. 카운트 값이 저장되는 곳은 null check2 후에ebx+64 -> **(ebx+8) -> **(ebx+8)+200 // ecx를 사용.후에 eax랑 ebx+64에 이 카운트 값이 들어가고나중에 ebx+64랑 ebx+68이랑 ADD해서, 처리해야 하는 문자 1개 얻음. 조건분기 2에서 *(ebx)과 *(ebx+64)를 비교한다. 둘 다 **은 문자열인데, *값은 다르다.뭐 중요한건 아닌거같다. 훼이크인듯 조건분기 3이 중요. 여기서 문자열의 개수가..
Block cipher mode of operation
Block cipher mode of operation
2016.11.25AES GCM도 CTR의 variation인데, Galois의 수학적 성질을 이용.CCM은 CTR에 CBC를 합친거 같은 mode.GCM이 CCM보다 좋은 성능을 냄. GCM은 stream cipher처럼 동작.병렬처리 가능. CTR
call-by-reference, call-by-value + call-by-address
call-by-reference, call-by-value + call-by-address
2016.11.22주소0차1차 &pp*p 122EF560 125F7458 71 Note ) java에서 말하는 참조 변수와, C++에서 말하는 참조 변수가 다름을 알아야 혼동을 피할 수 있다.C++에서 참조 변수는 java나 C에는 없는, 변수 자체의 alias 개념이다 ( case 3 참조 )java에서 참조 변수란 C나 C++에서 말하는 포인터 변수와 동일하다. 즉 배열, 객체 등을 가리키는 변수를 말한다.( C의 포인터 변수와 다른 점은 참조 변수에 아무 값이나 대입할 수는 없다는 것이다. )아마 java가 포인터를 지원하지 않으면서 포인터 변수 보다는 참조 변수라는 말을 쓰는 것 같다. case 1: call-by-value java는 항상 call-by-value다. ( 정확하게는 call-by-sharing =..
[Linux] Memory Layout, Segment + Kernel
[Linux] Memory Layout, Segment + Kernel
2016.11.212017/01/04 - [System/LINUX & UNIX] - procfs stack의 최대 크기는``c RLIMIT_STACK ( usually 8MB, 0x08000000 )``이다. * 한 번 확장된 stack top은 다시 줄어들지 않는다.Text segment의 시작지점은 보통 ``c 0x08048000``이지만, 항상 그런 것은 아니다.dynamic library는 stack과 heap의 중간 Memory Mapping Region에 mapping되고, static library는 text segment에 mapping된다.Memory Mapping Region의 경우 library mapping 이외의 용도로도 사용되는데, anonymous memory mapping이라고 부르며, ``c..
[compile process] Shared Library
[compile process] Shared Library
2016.11.21windows에서 lib과 dll을 사용하듯, Linux-based system에서도 비슷한 개념의 라이브러리가 존재한다.크게 static library와 shared library로 나뉘며, shared library가 다시 link 시점에 따라 나뉜다. Linking과 Loading의 차이LinkingAll of the object files and any libraries are linked together to make your final program. For static libraries, the actual library is placed in your final program, while for shared libraries, only a reference to the library is ..
XML
XML
2016.11.19XML(eXtensible Markup Language)tree 구조 ( hierarchical )반드시 단 하나의 root만 가져야 한다DTD(Document Type Definition)는 문서 당 하나여야 한다```xml ]> 127.0.0.1 . . .``` 검색```xml일반적으로는 / 문서 전체에서 검색 // 계층은 상관없음attribute를 검색 @ /ip/@addr 하면 loopback이 나온다.attribute로 검색 [] /ip[addr="loopback"]```xpath에서 namespace 때문에 tag가 검색이 잘 안되는데, 그럴 땐 //*[local-name()='ip']를 이용한다. 또는 NameSpaceContext를 만들어서 xpath에 붙여도 된다. namespace다른 ..
동기식, 비동기식 stream cipher
동기식, 비동기식 stream cipher
2016.11.18stream에서 동기식, 비동기식 차이는 key가 평문이나 암호문에 독립적이면 동기식, 종속적이면 비동기식이다. 동기식독립적일 경우 1bit error는 1bit에만 파급되나, (후속 암호문에 오류 파급되지 않음)1bit 추가/손실은 이후 XOR을 당기거나 밀어서 복호화에 실패한다.그래서 전송시에 동기화가 필요하다. 내부상태를 맞춰야하니까.난수열을 암호화 할 input과 독립적으로 생성하는 경우암/복호화에서 상호 동기화 필수의도적인 변조가 복호화 단계에서 검출 불가전송도중 변조되어도 후속 암호문에 오류 파급되지 않음 비동기식비동기식(자기동기식, 종속적)일 경우 내부상태에 의존하지 않아 동기화가 필요없는 대신 이전에 생성된 평문이나 암호문에 종속적이다. 따라서 1bit error/추가/삭제가 발생하면 일부..