운영체제 1차 면접 꼬리질문

지니🧸·2023년 4월 2일
1

피드백 저장소

목록 보기
4/5

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를 보냄
      • 주로 +1 하여 보냄
    • 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 공간을 가득 채워 다른 연결요청 정보 저장이 불가

공격 과정 및 결과

  1. 공격자 서버에 연결 요청(SYN) 전송
  2. 서버는 연결 요청에 응답(SYN, ACK) 전송
  3. 공격자가 ACK를 보내지 않음. 서버는 Backlog Queue에 정보 저장 후 대기중
  4. 공격자가 서버에 다시 연결 요청(SYN) 전송, 반복
  5. 서버는 Backlog queue에 공격자의 SYN 요쳥을 대기. 계속 queue 쌓임
  6. 한정적인 Backlog queue에 공격자의 queue가 가득채워 가용성 침해
  7. 정상 Client 접속시 연결 요청(SYN)을 보내도 서버는 ESTABLISHED(연결 수립)할 수 없음

대응책

  1. Backlog queue의 크기를 늘린다: 임시적으로 접속 문제 해결
  2. SYN Cookie 설정: 클라이언트로부터 ACK를 받을 때까지 Backlog Queue에 연결 요청정보 저장 안함
  3. 방화벽의 동일 클라이언트 IP에 대해 연결 요청(SYN) 임계치 설정
  4. TCP 연결 과정 대기시간을 줄임

static 변수란?

static variable, 정적 변수:
(지역변수 특성) 정적 변수는 프로그램이 종료되지 않는 한 메모리가 소멸되지 않고, 특별히 초깃값을 지정하지 않아도 자동으로 0을 가짐
(전역변수 특성) 한번만 초기화하며 프로그램이 종료될때까지 메모리공간에 존재

  • 정적 변수도 전역 변수와 마찬가지로 초기화할 때 반드시 상수를 초기화
  • 반복문의 중괄호 내에서 선언 되었더라도 초기화는 한번만 수행
  • 정적 지역 변수의 메모리 생성 시점: 중괄호 내에서 초기화 될때
  • 정적 지역 변수의 메모리 소멸 시점: 프로그램이 종료될때

참고:

profile
우당탕탕

0개의 댓글