Python 같이 하나의 언어를 PyPy, Jython로 다양하게 구현 이유?
구현, implementation: the way the interpreter was written – what languages were used and what is the purpose of that specific interpreter
VM:
- 파이썬 코드를 곧장 실행할 수는 없음
- 가상 머신이 이해할 수 있는 코드로 파이쓴을 parse해야 함
CPython
- C로 작성된 가장 널리 사용되는 파이썬 인터프리터/구현
- 원래 파이썬 버전
- 인터프리터와 컴파일러의 혼합
PyPy:
- 코드를 빠르게 실행해야 할 경우
- Python 언어로 구현
- JIT 컴파일
Jython:
- Java로 작성된 파이썬 구현
- 소스코드를 바이트코드로 변환
- 자바 가상 머신에서 실행
- 파이썬 & 자바의 방대한 라이브러리 및 프레임워크에 액세스 가능
비선점형 스케쥴링에서 인터럽트 처리하는 방법:
message queue, mail box, named pipe 차이:
Mail box: 별도의 윈도우를 열어 사용자에게 정보를 전달하거나 질문을 하는 장치
- 프로세스가 다른 프로세스를 위한 데이터 메시지를 메일박스에 넣음
- 수신하는 프로세스가 메시지박스에서 메시지를 받아갈 때까지 메시지는 메일박스에 존재
- 송신 프로세스가 메시지박스에 메시지를 넣기 전에 수신 프로세스가 메시지 박스를 확인하면 수신 프로세스는 메시지를 기다리거나 다음 방문에 메시지를 받아감
- Bounded vs. Unbounded
- Bounded: 메시지 박스가 갖고 있을 수 있는 메시지의 수가 제한됨
- Unbounded: 메시지 박스가 갖고 있을 수 있는 메시지의 수가 제한되지 않음
Message queue:
- 비동기, Asynchronous: queue에 넣기 때문에 나중에 처리
- 비동조, Decoupling: 애플리케이션과 분리 가능
- 탄력셩, Resilience: 일부가 실패 시 전체에 영향을 받지 않음
- 과잉, Redundancy: 실패할 경우 재실행 가능
- 보증, Guarantees: 작업이 처리됐는지 확인 가능
- 확장성, Scalable: 다수의 프로세스들이 큐에 메시지 보낼 수 있음
Named pipe:
- 익명파이프: 통신할 프로세스를 명확히 알 수 있는 경우
- Named pipe: 전혀 모르는 상태의 프로세스들 사이의 통신
- 부모 프로세스와 무관하게 모든 프로세스들 사이에서 통신이 가능
SYN Flooding을 활용한 공격 기법
SYN이란?
TCP(Transmission Control Protocol)는 3way handshake 방식을 통해 두 지점 간에 세션을 연결하여 통신을 시작하고 4-way handshake를 통해 세션을 종료하여 통신 종료
- 세션 연결, 해제, 데이터 전송/거부, 세션 종료 등의 기능이 패킷의 FLAG 값에 의존함
TCP Flag:
- 각 1비트로 TCP 세그먼트 필드 안에 CONTROL BIT 또는 FLAG BIT으로 정의
- 6가지로 구성
TCP Flag 6가지:
- URG/ACK/PSH/RST/SYN/FIN
- SYN(Synchronization, 동기화) > S: 연결 요청 플래그
- TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷
- 시퀀스 번호를 임의적으로 설정. 세션을 연결하는데 사용됨.
- 초기에 시퀀스 번호를 보내게 됨.
- ACK(Acknwoledgement) > Ack: 응답
- 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷
- 다른 플래그와 같이 출력되는 경우도 있음
- 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이/데이터 양을 더한것과 같은 ACK를 보냄
- ACK 응답을 통해 보낸 패킷에 대한 성공/실패를 판단하여 재전송하거나 다음 패킷을 전송
- RST(Reset) > R: 재연결 종료
- 재설정(Rest)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업
- 비정상적인 세션 연결 끊기에 해당
- 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용
- PSH(Push) > P: 밀어넣기
- TELNET와 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요. 이 때 받은 데이터를 즉시 목적지인 OSI 7 Layer의 Application 계층으로 전송하도록 하는 flag
- 대화형 트래픽에 사용됨. 버퍼가 채워지기를 기다리지 않고 데이터 전달
- 데이터는 버퍼링 없이 바로 위 계층이 아닌 7계층의 응용프로그램으로 바로 전달
- URG(Urgent) > U: 긴급 데이터
- Urgent pointer 유효한 것인지 나타냄
- Urgent pointer: 전송하는 데이터 중에서 긴급히 전달해야하 할 내용이 있을 경우에 사용
- 긴급한 데이터는 다른 데이터에 비해 우선순위가 높아야 함
- FIN(Finish) > F: 연결 종료 요청
- 세션 연결을 종료시킬 때 사용되며 더 이상 전송할 데이터가 없을 나타냄
TCP SYN Flooding: TCP의 연결과정 (3way handshake)에서 취약점을 이용하여 공격
- DoS의 공격의 종류
- 공격 당하면 TCP의 연결 가능 자원을 모두 소진하게 되고, 외부 사용자는 TCP 연결을 할 수 없게 됨
Backlog Queue: 서버가 접속자(Client/Hacker)의 연결 요청을 대기할 때, 요청 정보를 저장하는 공간
정상연결(ESTABLISHED)이 되면 Backlog Queue 공간에서 연결 요청정보가 삭제되어 공간은 계속 유지됨
- 연결과정이 중간에 정상적으로 진행되지 않는다면 정보가 계속 Backlog Queue에 남아 있음
- 계속적으로 연결요청 대기 queue가 쌓이면 Backlog queue 공간을 가득 채워 다른 연결요청 정보 저장이 불가
공격 과정 및 결과
- 공격자 서버에 연결 요청(SYN) 전송
- 서버는 연결 요청에 응답(SYN, ACK) 전송
- 공격자가 ACK를 보내지 않음. 서버는 Backlog Queue에 정보 저장 후 대기중
- 공격자가 서버에 다시 연결 요청(SYN) 전송, 반복
- 서버는 Backlog queue에 공격자의 SYN 요쳥을 대기. 계속 queue 쌓임
- 한정적인 Backlog queue에 공격자의 queue가 가득채워 가용성 침해
- 정상 Client 접속시 연결 요청(SYN)을 보내도 서버는 ESTABLISHED(연결 수립)할 수 없음
대응책
- Backlog queue의 크기를 늘린다: 임시적으로 접속 문제 해결
- SYN Cookie 설정: 클라이언트로부터 ACK를 받을 때까지 Backlog Queue에 연결 요청정보 저장 안함
- 방화벽의 동일 클라이언트 IP에 대해 연결 요청(SYN) 임계치 설정
- TCP 연결 과정 대기시간을 줄임
static 변수란?
static variable, 정적 변수:
(지역변수 특성) 정적 변수는 프로그램이 종료되지 않는 한 메모리가 소멸되지 않고, 특별히 초깃값을 지정하지 않아도 자동으로 0을 가짐
(전역변수 특성) 한번만 초기화하며 프로그램이 종료될때까지 메모리공간에 존재
- 정적 변수도 전역 변수와 마찬가지로 초기화할 때 반드시 상수를 초기화
- 반복문의 중괄호 내에서 선언 되었더라도 초기화는 한번만 수행
- 정적 지역 변수의 메모리 생성 시점: 중괄호 내에서 초기화 될때
- 정적 지역 변수의 메모리 소멸 시점: 프로그램이 종료될때
참고: