전체 글
PKCS ( Public Key Cryptography Standards )
PKCS ( Public Key Cryptography Standards )
2016.09.14Public Key Cryptography standards, 공개키 암호 표준 ( wiki ) RSA부터 Diffie-Hellman, Password-Based Encryption, Digital Signature까지 공개키에 관련된 RFC를 볼 수 있다. 현재 PKI 표준은 X.509다. ( ITU-T ) PKCS #7 ( RFC 2315 ) Cryptographic Message Syntax Standard ( Digital Envelope ) The enveloped-data content type consists of ①encrypted content of any type and ②encrypted content-encryption keys for one or more recipients. (필..
Naming convention
Naming convention
2016.09.14구글의 스타일 가이드 모음https://github.com/google/styleguide http://docs.navercorp.com/coding-convention/ Helper class / Utility class helper class는 특정 클래스의 작업을 도와주는 유틸리티 클래스라고 생각하면 된다. 어떤 기능을 제공하기는 하는데, 그 자체로 그 어플리케이션의 핵심 로직은 아닌 클래스를 의미한다. 예를 들면 DB를 다룬다거나, 안드로이드에서 CustomTabs를 띄워주는 기능을 한다거나. utility class와 하는 일은 비슷하지만, utility class는 모든 메서드가 static이라는 차이점이 있다. 즉, helper class가 더 큰 개념이라고 보면 된다. 클래스 네이밍 suf..
Pointer
Pointer
2016.09.14추적 주소 값 1284EA43 71 (**a) 125F7458 1284EA43 (*a) 122EF560 (&a) 125F7458 (a) ②→ ①↖ 포인터는 1 2 순서로 이동하며 따라가면 편하다. 포인터는 주소, 0차, 1차, 2차, ...로 생각하면 편하다. 주소 0차 1차 2차 &a a *a **a 122EF560 125F7458 1284EA43 71 포인터를 지원한다는 것은 어떤 변수에 대해 ``c &``연산을 통해 변수의 주소를 구할 수 있음을 의미한다. 자바도 참조개념을 사용하지만 포인터를 지원하지 않는다고 하는 것은 이런 맥락에서다. 포인터 배열과 배열 포인터 ```c int *p[4]; // 포인터 배열. [주소, 주소, 주소, 주소] int (*p)[4]; // 배열 포인터. [크기 4인 ..
객체 지향 5대 원칙 : SOLID
객체 지향 5대 원칙 : SOLID
2016.09.13[위키 link] 단일 책임의 원칙 (SRP, Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 어떤 코드를 어디에 두어야 하는가?를 결정할 때 많이 도움이 되는 원칙. '그 클래스를 변경해야 하는 상황,원인,이유가 딱 한가지 인지' 를 보면, 단일 책임으로 제대로 분리되었는지를 확인할 수 있다. 지키지 않는 경우 3.7 뒤엉킨 변경 문제가 발생한다. 클래스는 그 책임을 완전히 캡슐화해서 제공해야 한다. 어떤 클래스에 변경이 발생했을 때, 변경이 발생했다는 그 이유만으로 다른 클래스에도 변경이 발생해야하는 상황이 있어서는 안된다는 것이다. (어떤 사유로 내부 로직을 변경했다면, 거기서 끝나야 한다는 의미) 지키지 않는 경우 3.8 산탄총 수술 문제가 발생..
객체 지향 패러다임
객체 지향 패러다임
2016.09.12객체 지향 객체지향 패러다임을 사용할 때, 객체를 만드는 1순위 원칙은 책임이다. 객체를 물리적 또는 추상적 대상에 비유하는 것이 도움이 된다. (Domain Model에 한해서) Alan Kay : OOP to me means only messaging, local retention and protection and hiding of state-process, (상태 변경 프로세스의 로컬 바운더리 유지, 보호, 숨김. 더 많은 영역에서 상태를 변경 할 수록, 어디서 변경했나 추적하기 어렵고, 이는 예상과 다른 변수값을 유발하며, 버그를 생산한다.) and extreme late-binding of all things. https://velog.io/@eddy_song/alan-kay-OOP http:/..
Birthday Problem & Attack
Birthday Problem & Attack
2016.09.10n명의 사람이 있을 때 생일이 같은 사람이 둘 이상 있을 확률이 p(n)이면,이를 적어도 1명도 겹치지 않을 확률로 바꿀 수 있으므로 이고, 이다. p(n) = 0.5일 때 n은 22.xxx이므로 23명 이상일 때 p(n)은 50% 이상이 된다. Birthday Attack암호학적 해시 함수의 해시 충돌을 찾아내기 위해 몇 번의 시도가 필요한지를 알아내기 위한 방법이다. 실제 birthday attack에서는 가짓수가 365가 아닌 ``c 2^24`` 등 매우 큰 수인데, factorial ( 계승 ) 을 사용하면 계산이 어렵다.따라서 적당히 approximation시켜 사용한다. : 총 가짓수 ( 365일 ) : 시도 횟수 ( 사람 수 ) 일 때, 라는 간단한 식이 나온다. factorial 근사는 스..
Wireless ( IEEE 802.11 )
Wireless ( IEEE 802.11 )
2016.09.10WEP, WPA, WPA2-TKIP 까지는 크랙 가능.WPA2-AES의 경우 dictionary attack이나 brute force를 사용해야 한다. WEP정적키를 사용하는 RC4기반 스트림 암호화. IV는 24bit, 키는 40bit | 104bit이다.단순히 키 앞에 IV를 붙이는 방식으로 64bit | 128bit Seed를 만든 후 이를 RC4에 집어넣고 keystream을 생성한다. keystream과 평문을 XOR해서 암호문을 만든다.ICV는 4byte CRC-32.IV/KeyID는 IV가 3byte, KeyID가 1byte로 총 4byte.IV가 그대로 노출되며, 24bit IV는 birthday attack에 따르면 n = 5000이면 p > 0.5이다.RC4 WPA & WPA2WPA 표..
Firewall Architectures
Firewall Architectures
2016.09.08Bastion Hostdef ) A bastion host is a system identified by the firewall administrator as a crtitical strong point in the network's security. Bastion Host는 이름처럼 어그로가 집중되는 곳으로 다른 서비스에 대한 위협을 감소시키는 목적으로 운용되는 system이다.여기저기서 중구난방으로 정의해놓았는데, 상기한 내용이 제일 일반적인 정의다. ( Marcus J. Ranum )아래 내용은 '보통 이래야 한다'고 적어놓은 내용들이다. 꼭 아래 내용을 모두 만족해야 bastion host인 것은 아니다.해당 컴퓨터에서 보통 proxy같은 single application만 hosting한다.노출..
Prefetch, Superfetch
Prefetch, Superfetch
2016.09.07Prefetch프리패치(Prefetch)는 윈도우 XP 이후 운영체제에서 제공하는 메모리 관리 정책으로, 실행파일을 메모리로 로딩할 때의 효율을 최대한 끌어올리기 위한 목적으로 개발되었다. 실행 파일이 사용하는 시스템 자원을 프리패치 파일(.pf)에 저장해 두었다가, 부팅 시에 프리패치를 모두 메모리에 로드하는 방식이다. (실제 사용할 때에는 메모리 매핑 해주는 방식) 프리패치 파일에 저장되는 정보 중 분석에 유용한 목록은 아래와 같다. 실행 파일 이름실행 파일의 실행 횟수실행 파일의 마지막 실행 시간프리패치 파일의 생성 시간(파일 최초 실행 시간)실행된 볼륨의 정보실행파일 실행 시 참조하는 파일의 목록 하지만 프리패치의 사용은 메모리의 페이징 아웃 기법(오래 사용되지 않는 메모리 영역을 잠시 보조저장장..
OpenSSL Heartbleed
OpenSSL Heartbleed
2016.09.07TLS는 확장 프로토콜로 Heartbeat를 사용한다. ( RFC 6520 )Heartbeat는 Client와 Server가 connection이 제대로 유지되고 있는지 확인하기 위해 사용한다. Client는 Heartbeat를 이용하여 임의의 값을 그 길이와 함께 Server에 전송,Server는 받은 임의의 값을 Client에게 돌려보내는 과정으로 이루어진다. 임의의 값과 그 값의 길이 정보가 일치하지 않는다면 응답하지 않는 것이 정상이나, Heartbleed 취약점은 Server가 이것이 일치하는지 검증하지 않고 응답하면서 발생하는 취약점이다.Client가 "Hi!", 30Byte라고 보내면 Server는 "Hi!:?aw^er?435ˇs........awe23.4.rw234", 30Byte와 같이 ..
Windows 악성코드 감염시 처리 프로세스
Windows 악성코드 감염시 처리 프로세스
2016.09.07초기 분석프로세스 확인네트워크 패킷 확인system32 확인host파일 변조 확인레지스트리 확인 주로 HKLM & HKCU\Software\Microsoft\Windows\CurrentVersion\Run.*Temp 폴더 확인 - 보통 다른이름으로 복사해 실행된다. 이후 여러 툴을 이용해 상세 분석하고, 악성코드 식별 시 리버싱. svchost`` svchost.exe``는 프로세스 하나 당 서비스 하나를 실행시키는 프로세스로, 반드시 `` winlogin.exe - services.exe``의 자식 프로세스로 존재해야 한다.단독으로 존재하거나, 실행 레벨이 `` services.exe``와 동급이라면 악성코드일 가능성이 크다.windows 7으로 넘어오면, `` wininit.exe - services..
USB 사용 기록 조사
USB 사용 기록 조사
2016.09.06```bashEvent viewer -> system32 log (%SystemRoot%\inf\Setupapi.dev.log) -> registry```순으로 확인한다.이벤트 뷰어랑 log는 기록이 누락되어 있는 경우가 잦다.레지스트리를 직접 보려면 레지스트리 분석 도구를 이용해야 하기 때문에 어차피 도구를 이용할 거라면USBDeview를 이용해서 보는 편이 낫다. USB Device Tracking Artifacts on Windows 7, 8(RP) Artifacts Path Vendor & Product Name, Version HKLM\SYSTEM\ControlSet00#\Enum\USBSTOR\Disk&Ven_{Vendor Name}&Prod_{Product Name}&Rev_{Version}..