네트워크 연결이 끊어지면 데이터가 메모리에 남아 있습니까? 그렇다면 이 데이터를 어떻게 볼 수 있나요?

네트워크 연결이 끊어지면 데이터가 메모리에 남아 있습니까? 그렇다면 이 데이터를 어떻게 볼 수 있나요?

머신 3의 시스템 종료로 인해 네트워크 연결이 끊어지는 경우 데이터가 메모리에 남아 있는지 확인하려고 합니다. 모든 머신은 RHEL 7을 실행하고 있습니다. 내 설정은 다음과 같습니다.

기계 1 > 기계 2 > 기계 3

머신 3의 연결을 끊고 머신 1에서 보낸 정보가 몇 초 동안 유지되더라도 머신 2에 그대로 유지되는지 확인하고 싶습니다. Machine 2는 기본적으로 단지 라우팅일 뿐이며 실제로 정보를 처리하지는 않습니다. 정보는 TCP 또는 UDP를 통해 netcat을 통해 전송됩니다.

이 정보를 보는 가장 좋은 방법은 무엇입니까? 프로세스 pid를 추적한다고 가정하지만 유용한 정보를 수집할 수 없습니다. 다른 스레드를 보면 누군가 /proc/[pid]/maps를 수행하고 메모리를 gdb에 덤프한다고 언급한 것을 보았는데, 내가 보고 있는 모든 데이터를 탐색하는 것이 약간 어려운 것 같습니다.

내가 찾고 있는 일을 할 수 있는 더 좋은 방법이 있나요? 감사해요!

답변1

M2가 무엇을 하고 있는지, M3가 어떻게 닫히는지에 따라 달라질 것으로 예상됩니다. 또한 보안 관점에서 이를 고려하면 위협 모델을 정의하는 방법과 필요한 보안 수준에 따라 그 중요성이 달라집니다.

M2가 적극적으로 통신에 참여한다면TCP 수준에서즉, M1과 M2 사이에 하나의 TCP 연결이 있고 M2와 M3 사이에 또 ​​다른 TCP 연결이 있는 경우 M2의 운영 체제는 M3가 수신을 확인할 때까지(또는 다양한 타이머가 만료될 때까지) 전송된 모든 데이터를 저장해야 합니다. 오류). UDP 연결이거나 M2가 IP 라우터로만 작동하는 경우에는 이런 일이 발생할 필요가 없습니다. IP 및 UDP를 사용하면 패킷/데이터그램이 전송된 후 잊혀집니다. 이를 처리하는 것은 상위 계층 프로토콜의 책임입니다.

또한 M3가 닫히는 방식도 이와 약간 관련이 있습니다. 정전이나 네트워크 케이블 연결 끊김으로 인해 단순히 응답을 중지하는 경우 M2는 자신이 사라졌는지 알 수 없으며 (TCP를 사용하여) 재전송을 시도합니다. 그러나 사전에 종료되는 경우 M3의 운영 체제는 모든 활성 네트워크 연결이 순서대로 종료되도록 시도할 수 있습니다. 이 경우 M2는 연결이 닫혔다는 메시지를 수신하고 전송되지 않은 데이터를 삭제할 수 있습니다.

네트워크 버퍼는 운영 체제 내에 상주하므로 프로세스 메모리를 덤프해도 표시되지 않지만 프로세스는 일부 버퍼링도 수행하게 될 수 있습니다. M3 연결에서 오류를 감지했을 때 프로세스가 종료된 경우 유사한 인수가 적용될 수 있습니다.

위의 모든 사항은 향후 사용을 위해 보관해야 하는 데이터에 적용됩니다. 또한 일부 데이터가 M2 메모리, 더 이상 사용되지 않지만 실제로 덮어쓰이지 않은 버퍼에 남아 있을 수도 있습니다. 쉽게 식별할 수 있는 데이터를 사용하여 이 실험을 실제로 수행한 다음 전체 운영 체제의 메모리를 덤프하여 나머지 복사본을 찾는 것은 흥미로운 연습이 될 수 있습니다.

위협 모델에 따라 M2의 프로그램이나 운영 체제 자체가 손상되어 통신 사본이 알 수 없는 당사자에게 전송되는 시나리오를 고려할 수도 있습니다.

관련 정보