더북(TheBook)

소켓을 닫으면 관련 리소스를 모두 운영체제에 반납한다. 사용을 마친 소켓은 반드시 닫아주도록 하자.

Note ≣

대개의 경우, 패킷을 하나 보내면 운영체제가 거기에 IP 계층 헤더와 전송 계층 헤더를 만들어 붙인다. 그런데 소켓 형식을 SOCK_RAW로 하고 protocol에 0을 지정한 경우, 운영체제 대신 사용자가 직접 IP 및 전송 계층 헤더를 임의로 작성할 수 있다. 즉, 정상적인 방법으로는 수정할 수 없는 헤더 필드 값을 임의로 넣을 수 있는 것이다. 예를 들어 외부로 나가는 패킷의 TTL 값을 사용자가 원하는 대로 직접 기록할 수 있는데, Traceroute 유틸리티가 하는 일이 바로 이것이다. 여러 헤더 필드에 고의로 잘못된 값을 수작업으로 기입하고 싶다면 SOCK_RAW를 써야만 하는데, 서버에 퍼즈 테스트(fuzz test)를 하고자 할 때 이런 기법이 필요하다. 퍼즈 테스트에 대해선 10장 보안에서 언급한다.

Raw 소켓으로 전송하면 헤더에 잘못된 값을 기록할 수 있으므로 이는 잠재적 보안 위험 요소가 된다. 따라서 대부분 운영체제에선 관리자 권한이 있어야만 이 같은 소켓을 만들 수 있게 제약을 두고 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.