본문으로 바로 가기
최근에 여러 모듈이 설치된 사이트를 접했는데, 각 모듈이 패킷을 전달하고 있었습니다. 최악의 경우 약 2초에 1개 정도의 속도로 패킷이 전달되고 있었습니다. 그다지 빠르지 않다고 생각하실 수도 있겠지만, 하루에는 86,400초가 있으므로, 하루 동안 해당 모듈은 "보안" 서버에서 네트워크 외부로 63메가바이트(86,400 / 2 * 1472)의 데이터를 전송하거나, 보안 네트워크 내부로 63메가바이트의 해킹 도구를 유입시킬 수 있습니다.

 

그러나 대부분의 경우 패킷 전달은 보안 침해가 아니라 구성상의 문제를 나타내는 신호입니다. 예를 들어, 어떤 모듈에 IP 인터페이스가 2개 있다고 가정해 봅시다
enet1 10.1.1.1 255.255.0.0
enet2 192.168.1.1 255.255.255.0
또한 기본 라우터 주소가 192.168.1.254라고 가정해 봅시다

 

첫 번째 네트워크의 모든 호스트는 서브넷 마스크가 255.255.0.0인 10.1.X.Y 형식의 IP 주소를 가져야 합니다. 하지만 IP 주소가 10.1.1.17인 server_17이 더 많은 비트를 가진 서브넷 마스크(예: 255.255.255.0)를 사용하도록 설정되어 있다면 어떻게 될까요? 이 호스트는 여전히 10.1.1.X 형식의 IP 주소를 가진 모든 호스트와 통신할 수 있으므로 문제를 인지하지 못할 수도 있습니다. 하지만 IP 브로드캐스트 패킷을 전송할 때, 해당 IP 패킷의 수신 주소를 10.1.255.255 대신 10.1.1.255로 지정하게 됩니다. 해당 패킷을 캡슐화한 이더넷 프레임은 목적지로 이더넷 브로드캐스트 주소를 갖기 때문에, 모듈의 이더넷 드라이버는 프레임을 읽고 패킷을 IP 드라이버로 전달합니다. IP 드라이버는 IP 주소를 확인하여, 해당 주소가 enet1이나 enet2로 지정된 것도 아니고 브로드캐스트 주소인 10.1.255.255도 아니라는 것을 판단합니다. 포워딩이 활성화된 경우, IP 드라이버는 IP 주소가 10.1.1.255인 호스트로 패킷을 전달하려고 시도합니다. 모듈의 ARP 캐시에 10.1.1.255에 대한 항목이 없으면 ARP 요청을 전송합니다. 응답을 받거나(또는 이미 해당 항목이 있는 경우) 패킷을 10.1.1.255로 전달합니다. 응답을 받지 못하면 프레임을 폐기합니다. 또한 모듈은 “라우터”가 호스트의 IP 주소임을 나타내는 ICMP 라우팅 리디렉션 메시지를 보낼 수도 있습니다.

 

만약 server_17이 더 적은 비트의 서브넷 마스크(예: 255.0.0.0)를 사용한다면 어떻게 될까요? 이 경우 server_17이 사용하는 IP 브로드캐스트 주소는 10.255.255.255가 됩니다. IP 드라이버는 이 주소가 연결된 네트워크의 주소가 아니라고 판단하고 패킷을 기본 라우터인 192.168.1.254로 전달합니다. 이로 인해 모듈의 리소스뿐만 아니라 라우터의 리소스도 낭비됩니다. 동일한 브로드캐스트 도메인 내에 두 개의 서브넷이 있는 경우에도 동일한 상황이 발생합니다.

 

마지막으로 보안 문제를 다시 살펴보겠습니다. 보안 서버 server_S의 IP 주소가 10.1.1.100이고 서브넷 마스크가 255.255.0.0이라고 가정해 봅시다. 10.1.0.0 네트워크에는 라우터가 없으므로, 산업 스파이 이브(Eve)는 어떻게 서버_S에서 인터넷상의 5.6.7.8에 있는 고용주에게 데이터를 보낼 수 있을까요? 간단합니다. 그녀는 서버_S에 호스트 경로를 설정하여 5.6.7.8로 주소가 지정된 모든 패킷이 10.1.1.1로 전송되도록 하면 됩니다. 그게 전부입니다. 모듈은 패킷을 기본 라우터로 전달할 것이며, 기본 라우터에서 IP 주소 필터링이 수행되지 않는다고 가정할 때, 패킷은 5.6.7.8에 도달할 때까지 다음 라우터 등으로 계속 전달될 것입니다. 5.6.7.8이 10.1.1.100으로 응답할 방법은 없지만, 이브에게는 상관없습니다. 그녀는 데이터가 고용주에게 도달했는지 확인할 다른 방법을 가지고 있으니까요.

 

모듈이 패킷을 전달하고 있는지, 아니면 적어도 패킷을 전달하도록 구성되어 있는지 어떻게 알 수 있나요? “netstat -statistics“에서 필요한 모든 정보를 확인하실 수 있습니다.

 

netstat -statistics
. . .
ip:
. . .
1   ipforwarding (ON)
. . .
3117   ipForwDatagrams
. . .

 

모듈이 패킷을 전달하도록 설정된 경우 ipforwarding 변수는 1이 되고 레이블 뒤에 (ON)이 붙습니다. 모듈이 실제로 패킷을 전달하고 있다면 ipForwDatagrams 카운터가 증가합니다. ARP 캐시 항목이 없어 패킷이 실제로 전송되지 않더라도 카운터는 증가한다는 점에 유의하십시오.

 

IP 포워딩을 비활성화하려면 다음 명령을 실행하십시오. “>system>stcp>command_library>IP_forwarding off“네, IP 주소가 대문자로 되어 있습니다.”
이 시점에서 netstat -statistics 명령을 실행하면 다음과 같은 결과가 표시됩니다. ipforwarding 변수의 값이 2가 되면 레이블 뒤에 (OFF)가 붙습니다. 주의할 점은 ipForwDatagrams 변수가 초기화되지 않아 여전히 양수 값이 표시됩니다. 안타깝게도 이 값을 지울 방법은 없습니다.

 

netstat -statistics
. . .
ip:
. . .
2   ipforwarding (OFF)
. . .
3117   ipForwDatagrams
. . .

 

마지막으로 한 가지 주의할 점이 있습니다. 포워딩이 켜져 있는 상태에서 이를 끄면, (Eve 이외의) 누군가가 해당 모듈을 라우터로 사용하고 있는 경우 그 사람의 작업이 중단될 수 있습니다. 제 생각에는 이것이 나쁜 일은 아닙니다. STCP는 애초에 라우터로 설계된 것이 아니기 때문이죠. 하지만 불만이 제기될 수 있으니 이에 대비해 두시기 바랍니다.

 

————-
참고 사항
1 1472는 이더넷을 통해 전송되는 ICMP 에코 패킷에 포함할 수 있는 최대 바이트 수입니다.

© 2024 Stratus Technologies.