전체 글 (60) 썸네일형 리스트형 스택 프레임 변수 FS 포맷 스트링 공격 개념 - prinf() 함수는 문자열로 구성되는 첫 번째 인자에 format string directive 허용 - format string directive를 불명확하게 사용하여 발생하는 취약점 공격 - printf() 함수에서의 포맷 스트링 사용 예 main(){ char *buffer = "good"; printf("%s\n", buffer);} 첫 번째 인자 %로 시작되는 directive를 순서대로 처리하고, 두 번째 인자에 대응하여 순차적으로 디렉티브 처리한다.* 첫 번째 인자로서 문자열변수도 허용한다. 해당 코드에서 char *buffer = "good\n%x\n";로 수정한 경우에는 good 문자열 뒤에 804240이라는 숫자 또한 출력된다.이 숫자는 good .. 버퍼 오버플로우 BO 버퍼 오버플로우 개념- 데이터의 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 발생- 해커가 의도적으로 구성한 정보로 덮어쓰는 공격 수행 가능- 버퍼 오버플로우 공격에 취약한 함수와 그렇지 않은 함수가 있음(ex. strcpy() ) 버퍼 오버플로우 공격 취약한 기본 예제 코드int main()(int argc, char *argv[]){ char buffer[10]; strcpy(buffer, argv[1]); printf("%s\n", &buffer);} 예제 코드에서 오버플로우 공격은 strcpy(buffer, argv[1]) 에서 발생한다. GDB를 통하여 본 main()으로부터 strcpy()가 호출되는 과정 프로세스 흐름도1. 스택에 ebp 값을 넣음2. 현재의 ESP 값을 EB.. 캡슐화 좋은 클래스가 되기 위해 필요한 조건으로 정보은닉과 캡슐화가 있다.정보 은닉과 캡슐화는 밀접한 관련이 있다. 정보은닉정보은닉은 제한된 방법으로 접근의 허용을 해서 잘못된 값으로 맴버 변수, 맴버 함수가 저장되지 않도록 확인하기 위해서 유용하게 쓰인다. 흔히, 프로그래머는 'private'으로 맴버변수를 선언하고, 해당 변수에 대한 접근을 개별적으로 부여하여, 안전한 형태로 맴버 변수의 접근을 유도하는 것이 정보은닉이다. Const 함수 함수 내에서 맴버 변수의 접근 및 변경을 통제하는 const 함수에 의해서 저장된 값을 변경하지 않겠다는 의미이다. class Func1{private: int num;public: void InitNum(int n) { num = n; .. 프로세스 간 통신 IPC (InterProcess Communication)운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 서로 밀접한 프로세스들이다. 이러한 서로 밀접한 프로세스끼리, 서로 데이터를 보내거나 받을 수 있는 프로세스 간 통신을 IPC 기법이라고 한다. 프로세스 모델1. 공유 메모리 (shared memory) : 프로세스간 영역에 데이터를 읽고 쓰는 정보를 교환할 수 있다. : 시스템 콜을 사용하여 구현되므로 부가적인 시간 소비가 필요하며 커널 영역에서 구축된다.2. 메시지 전달(message passing) : 통신이 주체가 되어 프로세스간 교환을 통해 통신이 이루어진다. : 적은 양의 데이터를 교환하는데 유용하다. 분산 시스템에서 공유 메모리보다 구축하기 쉽다. IPC in Shared-M.. 프로세스 동기화 문제 흔하게 프로세스 동기화 문제는 임계구역을 문제로 하여 시작하게 된다. 각 프로세스에는 임계구역 내의 데이터 코드에서 다른 프로세스의 데이터와 접근할 수 있다. 이때, 발생할 수 있는 문제점으로는 하나의 프로세스가 자신의 임계구역에서 수행하는 동안엔 다른 프로세스가 접근할 수 없다는 것이다. 각 프로세스는 자신의 critical section에 진입 허가를 요청하게 된다. 이때, 요청을 구현하는 코드를 entry section이라고 부르며, 임계 구역 뒤에는 exit section이 있다. 이외의 코드 부분은 remainder section이라고 한다. 임계구역 문제에 대한 해결책은 세 가지 요구 조건을 충족해야 한다.1. 상호 배제 : 프로세스가 본인의 임계 구역 내에서 실행되고 있다면, 다른 프.. 포맷 스트링 공격 스택 조작 2. 포맷 스트링 공격의 원리- 포맷 스트링 문자를 이용한 메모리 열람char *buffer에 문자열을 입력할 떄 %x라는 포맷 스트링 디랙티브를 추가한 경우 #include main(){ char *buffer = "wishfree\n%x\n"; printf(buffer);} 결과값 : wishfree 문자열 외에 80440이라는 숫자 출력이 숫자는 wishfree 문자열이 저장된 다음의 메모리에 존재하는 값을 인자로 가정하여 출력된다. 포맷 스트링 디랙티브 종류 잘못된 포맷 스트링 함수 사용법#includemain(){ char *buffer = "wishfree"; printf(buffer);} 올바른 포맷 스트링 함수 사용법#include main(){ char *buffe.. 스레드 스레드스레드는 레지스터, PC, 스택으로 구성되는 CPU 이용의 기본 단위이다. 다중 스레드 장점1. 응답성 : 사용자 인터페이스를 설계하는데 있어서 유용하다. 예를 들어, 대화형 응용을 다중 스레드화함으로서 사용자의 긴 응답 요청을 기다릴 수 있다. 만약, 사용자가 연산이 오래 걸리는 요청을 할 떄, 단일 스레드와 비교하여 멀티 스레드는 비동기적 스레드에 의하여 사용자에게 여러 작업이 가능하게 한다.2. 자원 공유 : 프로세스는 공유 메모리와 메시지 전달 기법을 통해 자원을 공유할 수 있다. 스레드는 본인이 속한 스레드의 자원들과 메모리를 공유한다. 이는 같은 메모리 주소 공간 내에 여러 개의 다른 작업을 하는 스레드를 가질 수 있다.3. 경제성 : 스레드 생성이 프로세스 생성에 비하여 상대적으로 메.. 클라이언트 서버 통신 소켓 두 개의 프로세스가 통신하기 위해서는 극점(endpoint)를 갖는 두 개의 소켓이 필요하다.각 소켓은 IP 주소와 포트 번호 두 가지를 구별한다. 일반적으로 소켓은 클라이언트-서버 구조를 지원한다. 서버 소켓은 클라이언트 소켓의 응답 요청을 대기하며, 클라이언트 프로세스가 연결을 요청하면 호스트 서버에서 포트 번호를 부여한다. 예로, IP 주소 146.80.5.20 호스트가 a 클라이언트에게 웹 서버에 접속하기 위한 포트를 지정할 떄, 포트 1630을 부여한다. 두 호스트 사이에서 데이터 패킷 교환이 생길 때, 해당 패킷들은 목적지 포트 번호가 지정하는 곳에 맞춰 적절한 프로세스 통신이 이루어진다. 소켓 네트워크 도구를 JAVA를 예시로 하여 정리하고자 한다.TCP 소켓은 Socket.. 이전 1 2 3 4 ··· 8 다음