본문 바로가기

개념정리

(32)
Linux 구조 1. Linux 역사1970년 Ken Thompson과 Dennis Ritchie가 Unix 운영 체제를 출시한 것을 시작으로 많은 사건이 최초의 Linux 커널을 만들고 최종적으로는 Linux 운영 체제(OS)를 탄생시키는 계기가 되었습니다. Richard Stallman은 1983년에 GNU 프로젝트를 시작했습니다. 그의 목표는 무료 Unix 계열 운영 체제를 만드는 것이었고 그의 작업의 일부로 GNU General Public License(GPL)가 만들어졌습니다. Linux는 600개 이상의 배포판으로 제공됩니다. 가장 인기 있고 잘 알려진 것으로는 Ubuntu, Debian, Fedora, OpenSUSE, Elementary, Manjaro, Gentoo Linux, RedHat 및 Linu..
4. Windows Memory Layout 저번 시간에는 정적 분석과 동적 분석에 대하여 공부하였다. 이번 시간에는 윈도우 메모리 레이아웃에 대하여 공부할 것이다. 1. 메모리 레이아웃 메모리 레이아웃은 프로세스 가상 메모리의 구성을 말한다. 가상 메모리는 프로그램을 실행할 때 운영체제가 프로세스에게 사용 가능한 메모리 공간을 할당해주는데 이 때 메모리 공간을 의미한다. 운영체제는 프로그램의 정보를 참조하여 프로그램에 저장된 데이터가 적절한 영역에 저장되게 해야 한다. 2. 섹션 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있다. 섹션은 유사한 용도로 사용되는 데이터가 모여있는 영역이다. 섹션에 대한 정보는 PE 헤더에 적혀져 있다. ※ PE 헤더에 저장되어 있는 섹션과 관련된 데이터 섹션의 이름 섹션의 크기 센션의 로드될 주..
[System Hacking] 쉘 코드 모음(32비트, 64비트) 1. 32비트 쉘 코드 25 Bytes Shell Code (기본) \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 26 Bytes Shell Code (scanf 우회 : scanf는 \x09, \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못한다.) \x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80 41 Bytes Shell Code (setreuid(geteuid(), getreuid()) 포함) \x31\xc0\xb0\..
[Web Hacking] Cross Site Scripting : XSS 1. XSS XSS는 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있다. XSS 공격은 OWASP Top 10에 포함되어 있다. XSS는 SOP 보안 정책이 등장하면서 서로 다른 오리진에서는 정보를 읽는 행위가 이전에 비해 힘들어졌다. 그러나 이를 우회하는 다양한 기술이 나오면서 XSS 공격이 지속되고 있다. 2. XSS 종류 1) Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발생 사이트 게시판이나 댓글, 닉네임 등..
7. 공개키 암호 : RSA 저번 시간에는 Diffie-Hellman 알고리즘에 대하여 공부하였다. 이번 시간에는 공개키 암호 중 RSA에 대하여 공부할 것이다. 1. RSA RSA 암호 알고리즘에서는 모든 사용자에게 공개되는 공개키로 평문을 암호화하고, 타인에게 노출되어서는 안되는 개인키로 암호문을 복호화한다. RSA 암호 알고리즘의 안정성은 아주 큰 두 소수의 곱으로 이루어진 합성수를 인수분해하기 어렵다는 인수분해 문제의 어려움에서 나온다. 따라서 암호화할 때는 합성수의 소인수분해가 어려워지도록 각 인자를 적절히 설정해야한다. 1) 오일러 정리 오일러 정리는 n과 서로소인 양의 정수 m이 다음 식을 만족한다는 정리이다. mφ(n) ≡ 1 (mod n) φ(n) : 오일러 파이 함수이다. 오일러 파이함수는 n 이하의 양의 정수 중..
[System Hacking] Stack Buffer Overflow 1. 버퍼 버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소이다. 데이터의 처리 속도가 다른 두 장치가 있을 때, 둘 사이에 오가는 데이터를 임시로 저장해 두는 것을 완충 작용이라고 한다. 데이터의 처리 속도가 다른 두 장치 사이에 별도의 장치가 없다면, 유실되는 데이터가 발생한다. 이런 문제를 해결하고자 수신 측과 송신측 사이에 버퍼라는 임시 저장소를 두고, 이를 통해 간접적으로 데이터를 전달하게 한다. 즉, 송신 측은 버퍼로 데이터를 전송하고, 수신 측은 버퍼에서 데이터를 꺼내 사용한다. 이렇게 버퍼를 이용하면 버퍼가 가득 찰 때까지 유실되는 데이터 없이 통신할 수 있다. 스택에 있는 지역 변수는 스택 버퍼, 힙에 할당된 메모리 영역은 힙 버퍼라고 한다. 2. 버퍼 오버플로우 버퍼 오버플로..
[System Hacking] 함수 호출 규약 1. 함수 호출 규약 함수 호출 규약은 함수의 호출 및 반환에 대한 약속이다. 한 함수에서 다른 함수를 호출하면 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수를 반환하면 원래 함수로 돌아와서 기존의 실행 흐름을 이어간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자의 상태(Stack frame) 및 반환 주소(Return address)를 저장해야 한다. 또한 호출자는 피호출자가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 그러나 컴파일러의 도움 없이 어셈블리 코드를 작성하거나 어셈블리로 작성된 코드를 읽고자 한다면 함수 호출 규약을 알아야 할 필요가 있다. 컴파일..
[Cryptography] Diffie-Hellman에 대한 중간자 공격 Diffie-Hellman에 대한 중간자 공격에 대하여 공부하기 위해 Diffie-Hellman 알고리즘에 대하여 알아야 한다. Diffie-Hellman 알고리즘에 대한 참고 링크이다. 7. Diffie-Hellman 알고리즘 저번 시간에는 운영모드에 대하여 공부하였다. 이번 시간은 공개 키 교환 알고리즘인 Diffie-Hellman 알고리즘에 대하여 공부할 것이다. 밑에 링크는 공개 키 교환 알고리즘을 공부하기 위해 합동식 sungw00k.tistory.com 1. Diffie-Hellman에 대한 중간자 공격 중간자 공격은 네트워크로 통신하는 두 주체는 서로의 신원을 확인하기 어렵다는 네크워크 특성을 이용한 공격이다. 일반적으로 네트워크에서 발생하는 공격은 공격자가 통신에 개입하지 않으면 1) 수동..