포트 1234에서 수신 대기하는 서버가 있다고 가정 해 봅시다.이 포트에 연결할 수 있어야하는 클라이언트 소프트웨어가 있습니다. 하지만 악의적 인 사용자가 클라이언트 소프트웨어를 우회하여 콘솔이나 다른 소프트웨어와 같은 다른 방법으로 포트에 연결하는 것을 방지하고 싶습니다.안전한 방법으로 클라이언트 연결을 인증하려면 어떻게해야합니까?
신뢰할 수있는 클라이언트 소프트웨어와 서버는 필요한 경우 비밀 키를 공유 할 수 있습니다. 그런 키를 일반 텍스트로 보내지 않기를 원하지만 인증 후 데이터는 일반 텍스트 일 수 있습니다. 특히 악의적 인 사용자가 신뢰할 수있는 클라이언트 소프트웨어를 사용하여 서버 문제에 대한 올바른 응답을 계산하는 중간자 (man-in-the-middle) 공격을 없애는 방법을 알아 내려고합니다.
여기에서 갈 수 있습니까?
서버의 수신 대기 포트를 localhost에만 바인드 할 수 있으므로 클라이언트가 먼저 ssh를 통해 시스템에 액세스해야합니다. 그런 다음 클라이언트 소프트웨어는 ssh 라이브러리를 사용하여 로컬 포트에 연결하는 서버에서 명령을 실행할 수 있습니다 (이 시나리오에서 악의적 인 사용자는 암호가 없으므로 ssh를 사용하여 시스템에 액세스 할 수 없습니다). 하지만 모든 트래픽이 암호화되므로 추가 오버 헤드가 발생합니다. 아마도 ssh와 비슷한 프로그램이 인증을 수행하지만 그 후에는 채널을 일반 텍스트로 남겨 둘 수 있습니까?
업데이트 :
나는 모든 트래픽을 암호화와 관련된 오버 헤드를 결정하기 위해 테스트를 실행했습니다.
spew.rb는 100 만 줄을 출력합니다.
CONTROL :
[email protected]> time ssh localhost /home/fantius/spew.rb > /dev/null
real 0m40.704s
user 0m19.981s
sys 0m1.400s
최고 도시 45 % CPU 사용률 (약 2 :
[email protected]> time /home/fantius/spew.rb > /dev/null
real 0m35.015s
user 0m34.934s
sys 0m0.084s
톱 (4 개 개의 코어 중 하나 개의 전체 코어) 25 %의 CPU 사용률
TEST를 도시 전체 코어)
그래서 나는 모든 것을 암호화하는 비용 최소한입니다. 이것은 매우 데이터가 많이 걸리는 테스트입니다.
바이너리에서 비밀 키를 추출 할 수 있다면 완전히 액세스 할 수 있습니다.ssh는 man-in-the-middle 공격에 다소 저항합니다. 적어도 클라이언트가 서버가 발행 한 문제를 해결할 것을 요구하는 단순한 시스템 이상입니다. 그러나 나는 그 추가적인 저항의 본질을 모른다. – Fantius
침입자가 사용자 시스템에있는 경우 TCP 스택에 자신을 삽입하고 SSL 계층에 도달하기 전에 데이터 스트림을 캡처 할 수 있습니다. "중간"은 정확한 중간을 의미하지 않으며 두 종점 사이의 모든 위치를 의미합니다. 귀하의 서버에 침입자가 들어간다. SSL 레이어에서 나오는 데이터를 캡처 할 수 있습니다. –
http://en.wikipedia.org/wiki/Secure_Shell#Security_issues에 따르면 이전 SSH는 새로운 SSH보다 MITM에 더 취약합니다. 이해하려는 MITM에 대한 새로운 저항입니다. – Fantius