“익명"이란 무엇을 의미하는가?
귀하의 익명성 수준은 “누군가가 당신이 알려지기를 원하지 않는 정보를 알아내는 것이 얼마나 어려운지"로 설명할 수 있습니다 — 당신이 누구인지, 어디에 위치하는지, 누구와 소통하는지, 심지어 언제 소통하는지까지 말입니다. 여기서 “완벽한” 익명성은 유용한 개념이 아닙니다 — 소프트웨어가 컴퓨터를 사용하지 않거나 인터넷에 접속하지 않는 사람들과 구별할 수 없게 만들어 주지는 않기 때문입니다. 대신, 우리는 도움을 받을 수 있는 모든 사람의 실제 필요를 충족할 충분한 익명성을 제공하기 위해 노력하고 있습니다 — 단순히 웹사이트를 브라우징하는 사람부터 데이터를 교환하는 사람, 강력한 조직이나 국가에 의한 발견을 두려워하는 사람까지 말입니다.
I2P가 당신의 특정한 요구사항에 충분한 익명성을 제공하는지에 대한 질문은 어려운 문제이지만, 이 페이지는 다양한 공격 상황에서 I2P가 어떻게 작동하는지 탐구하여 당신이 자신의 요구에 부합하는지 결정할 수 있도록 도움을 주는 것을 목표로 합니다.
아래에 설명된 위협에 대한 I2P의 저항성에 대한 추가적인 연구와 분석을 환영합니다. 기존 문헌(대부분이 Tor에 초점을 맞춘)에 대한 더 많은 검토와 I2P에 초점을 맞춘 독창적인 연구가 필요합니다.
네트워크 토폴로지 요약
I2P는 많은 다른 시스템들의 아이디어를 기반으로 구축되었지만, 관련 문헌을 검토할 때 몇 가지 핵심 사항을 염두에 두어야 합니다:
- I2P는 무료 route mixnet입니다 — 메시지 생성자가 메시지가 전송될 경로(outbound tunnel)를 명시적으로 정의하고, 메시지 수신자가 메시지를 받을 경로(inbound tunnel)를 명시적으로 정의합니다.
- I2P에는 공식적인 진입점과 출구점이 없습니다 — 모든 피어가 믹스에 완전히 참여하며, 네트워크 계층의 인바운드 또는 아웃바운드 프록시는 없습니다(하지만 애플리케이션 계층에서는 몇 개의 프록시가 존재합니다).
- I2P는 완전히 분산되어 있습니다 — 중앙 제어나 권한이 없습니다. 일부 router들을 수정하여 믹스 캐스케이드를 운영하거나(tunnel을 구축하고 tunnel 엔드포인트에서 포워딩을 제어하는 데 필요한 키를 제공), 디렉토리 기반 프로파일링 및 선택을 수행할 수 있으며, 모두 네트워크의 나머지 부분과의 호환성을 깨뜨리지 않고 가능하지만, 그렇게 할 필요는 없습니다(그리고 익명성을 해칠 수도 있습니다).
우리는 메시지를 수신하는 특정 hop 또는 tunnel 게이트웨이에만 알려진 중요한 지연 및 배치 전략을 구현할 계획을 문서화했습니다. 이를 통해 대부분 낮은 지연시간을 가진 mixnet이 더 높은 지연시간 통신(예: 이메일)에 대한 커버 트래픽을 제공할 수 있습니다. 그러나 의미 있는 보호를 제공하기 위해서는 상당한 지연이 필요하며, 이러한 지연의 구현이 중대한 도전이 될 것임을 인지하고 있습니다. 현재로서는 이러한 지연 기능을 실제로 구현할지 명확하지 않습니다.
이론적으로 메시지 경로상의 router들은 메시지를 다음 피어로 전달하기 전에 임의의 수의 홉을 삽입할 수 있지만, 현재 구현에서는 그렇게 하지 않습니다.
위협 모델
I2P 설계는 2003년에 시작되었으며, 이는 Onion Routing , Freenet , Tor 의 출현 직후였습니다. 우리의 설계는 그 당시 발표된 연구들로부터 상당한 도움을 받았습니다. I2P는 여러 onion routing 기법을 사용하므로, Tor에 대한 상당한 학술적 관심으로부터 지속적으로 도움을 받고 있습니다.
익명성 문헌 (주로 Traffic Analysis: Protocols, Attacks, Design Issues and Open Problems )에서 제시된 공격과 분석을 바탕으로, 다음은 다양한 공격과 I2P의 많은 방어 메커니즘을 간략히 설명합니다. 새로운 공격이 식별되면 이 목록을 업데이트합니다.
I2P에 고유할 수 있는 일부 공격들이 포함되어 있습니다. 우리는 이러한 모든 공격에 대해 완벽한 해답을 가지고 있지는 않지만, 지속적으로 연구하고 방어 시스템을 개선하고 있습니다.
또한 현재 네트워크 규모가 작기 때문에 이러한 공격들 중 많은 것들이 본래보다 훨씬 쉽게 수행될 수 있습니다. 해결해야 할 몇 가지 제한사항들을 인지하고 있지만, I2P는 수십만 또는 수백만 명의 참가자를 지원하도록 설계되었습니다. 계속해서 I2P를 알리고 네트워크를 확장해 나가면서, 이러한 공격들은 훨씬 더 어려워질 것입니다.
네트워크 비교 및 “garlic” 용어 페이지도 검토하시는 데 도움이 될 수 있습니다.
무차별 대입 공격
전역 수동 또는 능동 공격자가 모든 노드 간에 전송되는 모든 메시지를 감시하고 어떤 메시지가 어떤 경로를 따르는지 상관관계를 찾아내려 시도하는 무차별 대입 공격(brute force attack)이 시도될 수 있습니다. I2P에 대해 이러한 공격을 수행하는 것은 매우 어려워야 합니다. 네트워크의 모든 피어가 지속적으로 메시지를 전송하고 있고(종단 간 메시지와 네트워크 유지보수 메시지 모두), 또한 종단 간 메시지는 경로를 따라가며 크기와 데이터가 변경되기 때문입니다. 게다가 외부 공격자는 메시지에 접근할 수도 없습니다. router 간 통신이 암호화되고 스트리밍되기 때문입니다(1024바이트 메시지 두 개를 2048바이트 메시지 하나와 구별할 수 없게 만듦).
하지만 강력한 공격자는 무차별 대입 공격을 사용하여 트래픽 패턴을 탐지할 수 있습니다. 만약 공격자가 I2P 목적지에 5GB를 전송하고 모든 사람의 네트워크 연결을 모니터링할 수 있다면, 5GB의 데이터를 받지 않은 모든 피어를 제거할 수 있습니다. 이러한 공격을 무력화하는 기법들이 존재하지만, 비용이 엄청날 수 있습니다(Tarzan 의 모방 기법이나 일정한 비율의 트래픽 참조). 대부분의 사용자는 이러한 공격에 대해 우려하지 않습니다. 왜냐하면 공격을 수행하는 비용이 극도로 높고 (종종 불법적인 활동을 요구하기도) 때문입니다. 하지만 이러한 공격은 여전히 가능합니다. 예를 들어 대형 ISP나 인터넷 교환 지점의 관찰자에 의해서 말입니다. 이를 방어하고자 하는 사용자는 낮은 대역폭 제한 설정, I2P 사이트에 대해 미공개 또는 암호화된 leaseSet 사용과 같은 적절한 대응책을 취하고 싶을 것입니다. 비자명한 지연이나 제한된 경로와 같은 다른 대응책들은 현재 구현되지 않았습니다.
단일 router나 router 그룹이 네트워크의 모든 트래픽을 라우팅하려고 시도하는 것에 대한 부분적 방어책으로, router들은 단일 피어를 통해 라우팅할 수 있는 tunnel 수에 대한 제한을 포함합니다. 네트워크가 성장함에 따라 이러한 제한은 추가 조정될 수 있습니다. 피어 평가, 선택 및 회피를 위한 다른 메커니즘들은 피어 선택 페이지에서 논의됩니다.
타이밍 공격
I2P의 메시지는 단방향이며 응답이 반드시 전송될 것을 의미하지는 않습니다. 그러나 I2P 위에서 실행되는 애플리케이션들은 메시지 빈도 내에서 인식 가능한 패턴을 가질 가능성이 높습니다. 예를 들어, HTTP 요청은 HTTP 응답을 포함하는 대량의 응답 메시지 시퀀스를 동반하는 작은 메시지가 될 것입니다. 이러한 데이터와 네트워크 토폴로지의 광범위한 관점을 사용하여, 공격자는 일부 링크를 메시지를 전달하기에는 너무 느리다고 판단하여 배제할 수 있을지도 모릅니다.
이런 종류의 공격은 강력하지만, I2P에 대한 적용 가능성은 명확하지 않습니다. 큐잉, 메시지 처리, 그리고 스로틀링으로 인한 메시지 지연의 변동이 종종 단일 링크를 통해 메시지를 전달하는 시간과 같거나 이를 초과하기 때문입니다 — 공격자가 메시지를 받는 즉시 응답이 전송될 것임을 알고 있는 경우에도 마찬가지입니다. 하지만 상당히 자동적인 응답을 노출시키는 몇 가지 시나리오가 있습니다 — 스트리밍 라이브러리가 그런 경우이고 (SYN+ACK로), 보장된 전달의 메시지 모드도 마찬가지입니다 (DataMessage+DeliveryStatusMessage로).
프로토콜 스크러빙이나 높은 지연 시간 없이는, 전역 능동 공격자들이 상당한 정보를 얻을 수 있습니다. 따라서 이러한 공격을 우려하는 사람들은 지연 시간을 늘리거나(중요한 지연이나 배치 전략 사용), 프로토콜 스크러빙을 포함하거나, 기타 고급 tunnel 라우팅 기법을 사용할 수 있지만, 이들은 I2P에서 구현되지 않았습니다.
참고문헌: Low-Resource Routing Attacks Against Anonymous Systems
교집합 공격
저지연 시스템에 대한 교집합 공격은 매우 강력합니다 — 주기적으로 대상과 연락하고 네트워크에 어떤 피어들이 있는지 추적합니다. 시간이 지나면서 노드 이탈이 발생함에 따라, 공격자는 메시지가 성공적으로 전달될 때 온라인 상태인 피어들의 집합을 단순히 교집합하는 것만으로도 대상에 대한 중요한 정보를 얻게 됩니다. 이 공격의 비용은 네트워크가 성장함에 따라 상당하지만, 일부 시나리오에서는 실행 가능할 수 있습니다.
요약하면, 공격자가 동시에 tunnel의 양 끝단에 위치한다면 공격에 성공할 수 있습니다. I2P는 저지연 통신에 대해 이에 대한 완전한 방어를 제공하지 않습니다. 이는 저지연 onion routing의 본질적인 약점입니다. Tor도 유사한 면책 조항 을 제공합니다.
I2P에서 구현된 부분적 방어 기법:
- 피어의 엄격한 순서화
- 천천히 변화하는 소규모 그룹에서의 피어 프로파일링 및 선택
- 단일 피어를 통해 라우팅되는 tunnel 수 제한
- 동일한 /16 IP 범위의 피어들이 단일 tunnel의 구성원이 되는 것을 방지
- I2P Sites 또는 기타 호스팅 서비스의 경우, 여러 router에서의 동시 호스팅 또는 멀티호밍 지원
전체적으로 봐도 이러한 방어책들은 완전한 해결책이 아닙니다. 또한 우리의 취약성을 크게 증가시킬 수 있는 몇 가지 설계 선택을 했습니다:
- 저대역폭 “guard node"를 사용하지 않습니다
- 여러 tunnel로 구성된 tunnel pool을 사용하며, 트래픽이 tunnel 간에 이동할 수 있습니다.
- Tunnel은 오래 지속되지 않으며, 10분마다 새로운 tunnel이 구축됩니다.
- Tunnel 길이는 설정 가능합니다. 완전한 보호를 위해서는 3홉 tunnel이 권장되지만, 여러 애플리케이션과 서비스는 기본적으로 2홉 tunnel을 사용합니다.
미래에는 상당한 지연을 감당할 수 있는 peer들에게 가능할 수 있습니다 (중요한 지연 및 배치 전략에 따라). 또한 이는 다른 사람들이 알고 있는 destination에만 해당됩니다 — destination이 신뢰할 수 있는 peer들에게만 알려진 private 그룹은 걱정할 필요가 없습니다. 공격자가 해당 그룹을 “ping"하여 공격을 시작할 수 없기 때문입니다.
참고: One Cell Enough
서비스 거부 공격
I2P에 대해 사용할 수 있는 서비스 거부 공격은 매우 다양하며, 각각 다른 비용과 결과를 가집니다:
탐욕적 사용자 공격: 이는 단순히 사람들이 기여하려는 것보다 훨씬 많은 자원을 소비하려고 시도하는 것입니다. 이에 대한 방어책은 다음과 같습니다:
- 대부분의 사용자가 네트워크에 리소스를 제공하도록 기본값을 설정합니다. I2P에서는 사용자가 기본적으로 트래픽을 라우팅합니다. 다른 네트워크들 과는 확연히 달리, I2P 사용자의 95% 이상이 다른 사람들을 위해 트래픽을 중계합니다.
- 사용자가 네트워크에 대한 기여도(공유 비율)를 늘릴 수 있도록 쉬운 설정 옵션을 제공합니다. 사용자가 자신의 기여도를 볼 수 있도록 “공유 비율"과 같은 이해하기 쉬운 지표를 표시합니다.
- 블로그, 포럼, IRC 및 기타 소통 수단을 통해 강력한 커뮤니티를 유지합니다.
Starvation 공격: 악의적인 사용자가 네트워크에 해를 끼치기 위해 동일한 개체의 통제하에 있다고 식별되지 않는 상당수의 peer들을 네트워크에 생성할 수 있습니다(Sybil 공격과 유사). 이러한 노드들은 네트워크에 어떤 리소스도 제공하지 않기로 결정하여, 기존 peer들이 더 큰 네트워크 데이터베이스를 검색하거나 필요 이상으로 많은 tunnel을 요청하게 만듭니다. 또는 이러한 노드들이 선택된 트래픽을 주기적으로 드롭하거나 특정 peer들과의 연결을 거부함으로써 간헐적인 서비스를 제공할 수 있습니다. 이러한 행동은 과부하가 걸리거나 고장난 노드의 행동과 구별하기 어려울 수 있습니다. I2P는 peer들의 프로파일을 유지하고, 성능이 저조한 peer들을 식별하여 단순히 무시하거나 드물게 사용함으로써 이러한 문제들을 해결합니다. 우리는 문제가 있는 peer들을 인식하고 회피하는 능력을 크게 향상시켰습니다. 그러나 이 분야에서는 여전히 상당한 노력이 필요합니다.
플러딩 공격: 악의적인 사용자가 네트워크, 피어, 목적지 또는 tunnel을 플러딩하려고 시도할 수 있습니다. 네트워크 및 피어 플러딩이 가능하며, I2P는 표준 IP 계층 플러딩을 방지하기 위해 아무것도 하지 않습니다. 대상의 다양한 인바운드 tunnel 게이트웨이에 대량의 메시지를 보내서 목적지를 메시지로 플러딩하는 것은 가능하지만, 목적지는 메시지 내용과 tunnel 테스트가 실패하기 때문에 이를 알 수 있습니다. 단일 tunnel만 플러딩하는 경우에도 마찬가지입니다. I2P는 네트워크 플러딩 공격에 대한 방어책이 없습니다. 목적지 및 tunnel 플러딩 공격의 경우, 대상은 응답하지 않는 tunnel을 식별하고 새로운 것을 구축합니다. 클라이언트가 더 큰 부하를 처리하려는 경우 더 많은 tunnel을 추가하는 새로운 코드를 작성할 수도 있습니다. 반면에 부하가 클라이언트가 처리할 수 있는 것보다 많다면, (고급 tunnel 작업이 구현되면) tunnel이 전달해야 할 메시지나 바이트 수를 조절하도록 지시할 수 있습니다.
CPU 부하 공격: 현재 원격에서 peer가 암호학적으로 비용이 많이 드는 작업을 수행하도록 요청할 수 있는 몇 가지 방법이 있으며, 악의적인 공격자가 이를 이용해 해당 peer에 대량의 요청을 보내 CPU를 과부하시킬 수 있습니다. 좋은 엔지니어링 관행을 사용하고 이러한 비용이 많이 드는 요청에 중요한 인증서(예: HashCash)를 첨부하도록 요구하는 것이 이 문제를 완화할 수 있지만, 공격자가 구현상의 다양한 버그를 악용할 여지는 여전히 있을 수 있습니다.
Floodfill DOS 공격: 악의적인 사용자가 floodfill router가 되어 네트워크에 해를 끼치려 할 수 있습니다. 신뢰할 수 없거나 간헐적이거나 악의적인 floodfill router에 대한 현재 방어 체계는 미흡합니다. floodfill router는 조회에 대해 잘못된 응답을 제공하거나 응답하지 않을 수 있으며, floodfill 간 통신을 방해할 수도 있습니다. 일부 방어 체계와 피어 프로파일링이 구현되어 있지만, 더 많은 작업이 필요합니다. 자세한 내용은 네트워크 데이터베이스 페이지 를 참조하세요.
태깅 공격
태그 공격 — 경로를 따라 나중에 식별할 수 있도록 메시지를 수정하는 공격 — 은 I2P에서는 그 자체로 불가능합니다. tunnel을 통과하는 메시지가 서명되기 때문입니다. 하지만 공격자가 인바운드 tunnel gateway이면서 동시에 해당 tunnel의 더 뒤쪽 참여자이기도 하다면, 공모를 통해 자신들이 같은 tunnel에 있다는 사실을 식별할 수 있습니다 (고유한 hop id와 기타 업데이트가 추가되기 전에는, 같은 tunnel 내의 공모하는 피어들이 아무런 노력 없이도 이 사실을 인식할 수 있었습니다). 하지만 아웃바운드 tunnel의 공격자와 인바운드 tunnel의 어떤 부분도 공모할 수 없습니다. tunnel 암호화가 인바운드와 아웃바운드 tunnel에 대해 데이터를 별도로 패딩하고 수정하기 때문입니다. 외부 공격자들은 링크가 암호화되고 메시지가 서명되어 있기 때문에 아무것도 할 수 없습니다.
분할 공격
분할 공격 — 네트워크의 피어들을 (기술적으로 또는 분석적으로) 분리하는 방법을 찾는 것 — 은 강력한 적수를 다룰 때 염두에 두어야 할 중요한 사항입니다. 네트워크의 크기가 익명성을 결정하는 핵심적인 역할을 하기 때문입니다. 피어들 간의 연결을 끊어 분할된 네트워크를 만드는 기술적 분할은 I2P의 내장된 network database로 대처됩니다. 이는 다양한 피어들에 대한 통계를 유지하여 다른 분할된 섹션들과의 기존 연결을 활용해 네트워크를 복구할 수 있게 합니다. 하지만 공격자가 통제되지 않은 피어들과의 모든 연결을 끊어 본질적으로 대상을 고립시킨다면, 어떤 network database 복구 작업도 이를 해결할 수 없습니다. 그 시점에서 router가 할 수 있는 유일한 일은 이전에 신뢰할 수 있었던 상당수의 피어들이 사용 불가능해졌음을 감지하고 클라이언트에게 일시적으로 연결이 끊어졌다는 것을 알리는 것입니다 (이 감지 코드는 현재 구현되어 있지 않습니다).
router와 목적지가 어떻게 행동하는지 차이점을 찾아 네트워크를 분석적으로 분할하고 그에 따라 그룹화하는 것도 매우 강력한 공격입니다. 예를 들어, 네트워크 데이터베이스를 수집 하는 공격자는 특정 목적지가 LeaseSet에서 5개의 인바운드 tunnel을 가지고 있는 반면 다른 목적지들은 2개 또는 3개만 가지고 있다는 것을 알 수 있으며, 이를 통해 적대자가 선택된 tunnel 수에 따라 클라이언트들을 잠재적으로 분할할 수 있습니다. 또 다른 분할은 비자명한 지연과 배치 전략을 다룰 때 가능한데, tunnel 게이트웨이와 0이 아닌 지연을 가진 특정 홉들이 두드러지게 나타날 가능성이 높기 때문입니다. 하지만 이 데이터는 해당 특정 홉들에게만 노출되므로, 이 문제에 대해 효과적으로 분할하려면 공격자가 네트워크의 상당 부분을 제어해야 하며(그리고 여전히 그것은 확률적 분할일 뿐입니다. 다른 어떤 tunnel이나 메시지가 그러한 지연을 가지고 있는지 알 수 없기 때문입니다).
네트워크 데이터베이스 페이지 에서도 논의됨 (부트스트랩 공격).
전임자 공격
predecessor 공격은 터널에 참여하고 이전 또는 다음 홉(각각 outbound 또는 inbound tunnel의 경우)을 추적함으로써 어떤 피어가 목적지에 ‘가까운지’ 확인하려는 시도로 수동적으로 통계를 수집하는 것입니다. 시간이 지나면서 완전히 무작위로 샘플링된 피어와 무작위 순서를 사용하여, 공격자는 어떤 피어가 통계적으로 나머지보다 더 ‘가깝게’ 나타나는지 확인할 수 있고, 그 피어는 결국 대상이 위치한 곳이 될 것입니다.
I2P는 네 가지 방법으로 이를 회피합니다: 첫째, tunnel에 참여하도록 선택된 peer들은 네트워크 전체에서 무작위로 샘플링되지 않습니다 — 이들은 peer를 계층으로 나누는 peer 선택 알고리즘에서 파생됩니다. 둘째, tunnel 내 peer들의 엄격한 순서화 로 인해 peer가 더 자주 나타난다고 해서 그들이 소스라는 것을 의미하지는 않습니다. 셋째, 순열화된 tunnel 길이(기본적으로 활성화되지 않음)를 사용하면 0 hop tunnel도 게이트웨이의 간헐적 변화가 일반적인 tunnel처럼 보이기 때문에 그럴듯한 부인 가능성을 제공할 수 있습니다. 넷째, 제한된 경로(미구현)를 사용하면 대상에 대한 제한된 연결을 가진 peer만이 대상에 접촉하게 되고, 공격자들은 단지 그 게이트웨이에 부딪히게 됩니다.
현재 tunnel 구축 방법은 전임자 공격(predecessor attack)에 대응하기 위해 특별히 설계되었습니다. 교차 공격 도 참조하십시오.
참고문헌: Wright et al. 2008 , 이는 2004년 선행 공격 논문 의 업데이트 버전입니다.
수집 공격
“Harvesting"은 I2P를 실행하는 사용자들의 목록을 수집하는 것을 의미합니다. 이는 단순히 peer를 실행하여 연결되는 대상을 확인하고, 찾을 수 있는 다른 peer들에 대한 참조 정보를 수집함으로써 법적 공격이나 다른 공격을 돕는 데 사용될 수 있습니다.
I2P 자체는 이러한 공격에 대한 효과적인 방어 메커니즘을 갖추고 있지 않습니다. 바로 이러한 정보를 포함하는 분산 네트워크 데이터베이스가 존재하기 때문입니다. 다음 요소들은 실제로 이 공격을 다소 어렵게 만듭니다:
- 네트워크 성장으로 인해 네트워크의 특정 비율을 확보하는 것이 더 어려워질 것입니다
- Floodfill router들은 DOS 보호를 위해 쿼리 제한을 구현합니다
- Router가 자신의 정보를 netDb에 게시하는 것을 방지하는 “Hidden mode"는 (데이터 중계도 방지하지만) 현재 널리 사용되지 않지만 사용될 수 있습니다.
향후 구현에서는 기본 및 포괄적 제한 라우트가 이 공격의 위력을 줄일 것입니다. “숨겨진” 피어들이 네트워크 데이터베이스에 자신의 연락 주소를 게시하지 않고, 오직 자신에게 도달할 수 있는 tunnel들(그리고 공개 키 등)만 게시하기 때문입니다.
향후 router들은 GeoIP를 사용하여 I2P 노드로 식별되는 것이 위험한 특정 국가에 있는지 확인할 수 있습니다. 이 경우 router는 자동으로 숨김 모드를 활성화하거나 기타 제한된 라우팅 방법을 적용할 수 있습니다.
트래픽 분석을 통한 신원 확인
router로 들어오고 나가는 트래픽을 검사함으로써, 악의적인 ISP나 국가 수준의 방화벽이 컴퓨터에서 I2P가 실행 중인지 식별할 수 있습니다. 위에서 논의한 바와 같이, I2P는 컴퓨터에서 I2P가 실행 중인 것을 숨기도록 특별히 설계되지 않았습니다. 하지만 전송 계층과 프로토콜 설계에서 내려진 여러 설계 결정으로 인해 I2P 트래픽을 식별하는 것이 다소 어려워집니다:
- 무작위 포트 선택
- 모든 트래픽의 점대점 암호화
- 프로토콜 바이트나 기타 암호화되지 않은 상수 필드가 없는 DH 키 교환
- TCP와 UDP 전송의 동시 사용. UDP는 일부 심층 패킷 검사(DPI) 장비가 추적하기 훨씬 어려울 수 있습니다.
가까운 미래에, 우리는 I2P transport 프로토콜의 추가 난독화를 통해 트래픽 분석 문제를 직접적으로 해결할 계획이며, 다음과 같은 것들을 포함할 수 있습니다:
- 연결 핸드셰이크 중 특히 전송 계층에서 임의 길이로의 패딩
- 패킷 크기 분포 서명 연구 및 필요에 따른 추가 패딩
- SSL 또는 기타 일반적인 프로토콜을 모방하는 추가 전송 방법 개발
- 상위 계층의 패딩 전략이 전송 계층에서 패킷 크기에 미치는 영향 검토
- Tor를 차단하기 위해 다양한 국가 수준 방화벽에서 구현된 방법 검토
- DPI 및 난독화 전문가와의 직접적인 협력
참고: Breaking and Improving Protocol Obfuscation
시빌 공격
Sybil은 적대자가 임의로 많은 수의 공모 노드를 생성하고 이렇게 증가된 수를 이용해 다른 공격을 수행하는 공격 범주를 설명합니다. 예를 들어, 공격자가 피어가 무작위로 선택되는 네트워크에 있고 해당 피어 중 하나가 될 확률을 80%로 원한다면, 단순히 네트워크에 있는 노드 수의 5배만큼 노드를 생성하고 주사위를 굴리면 됩니다. 신원이 무료일 때, Sybil은 강력한 적대자에게 매우 효과적인 기법이 될 수 있습니다. 이를 해결하는 주요 기법은 단순히 신원을 ‘무료가 아니게’ 만드는 것입니다 — Tarzan (등)은 IP 주소가 제한적이라는 사실을 이용하고, IIP는 HashCash 를 사용하여 새로운 신원 생성에 대해 ‘비용을 청구’했습니다. 현재 우리는 Sybil을 해결하기 위한 특별한 기법을 구현하지 않았지만, router와 destination의 데이터 구조에 필요시 적절한 값의 HashCash 인증서(또는 희소성을 증명하는 다른 인증서)를 포함할 수 있는 자리 표시자 인증서를 포함하고 있습니다.
다양한 곳에서 HashCash 인증서를 요구하는 것에는 두 가지 주요 문제가 있습니다:
- 하위 호환성 유지
- 전형적인 HashCash 문제 — 고사양 머신에서 의미 있는 작업 증명이 되는 HashCash 값을 선택하면서도, 모바일 기기와 같은 저사양 머신에서 여전히 실행 가능하도록 하는 것.
주어진 IP 범위 내 router 수에 대한 다양한 제한은 여러 IP 블록에 머신을 배치할 능력이 없는 공격자에 대한 취약성을 제한합니다. 하지만 이는 강력한 적수에 대해서는 의미 있는 방어가 되지 않습니다.
더 많은 시빌 공격 논의는 네트워크 데이터베이스 페이지 를 참조하세요.
버디 고갈 공격
(참고: In Search of an Anonymous and Secure Lookup 섹션 5.2)
공모하는 피어를 제외하고 tunnel 구축 요청을 수락하거나 전달하는 것을 거부함으로써, router는 터널이 완전히 자신의 공모 router 집합으로만 형성되도록 할 수 있습니다. 공모하는 router의 수가 많을 경우, 즉 Sybil 공격 의 경우 성공 확률이 높아집니다. 이는 피어의 성능을 모니터링하는 데 사용되는 우리의 피어 프로파일링 방법에 의해 어느 정도 완화됩니다. 그러나 논문에서 명시한 바와 같이 router 수가 f = 0.2, 즉 20%의 악의적인 노드에 근접할 때 이는 강력한 공격입니다. 악의적인 router들은 또한 대상 router와의 연결을 유지하고 해당 연결을 통한 트래픽에 대해 우수한 전달 대역폭을 제공하여, 대상이 관리하는 프로파일을 조작하고 매력적으로 보이도록 시도할 수 있습니다. 추가적인 연구와 방어책이 필요할 수 있습니다.
암호화 공격
우리는 긴 키를 가진 강력한 암호화를 사용하며, I2P에서 사용되는 업계 표준 암호화 기본 요소들의 보안성을 전제로 합니다. 보안 기능으로는 경로상에서 변조된 메시지의 즉각적인 탐지, 자신에게 주소가 지정되지 않은 메시지의 복호화 불가능, 그리고 중간자 공격에 대한 방어가 있습니다. 2003년에 선택된 키 크기는 당시로서는 매우 보수적이었으며, 여전히 다른 익명 네트워크 에서 사용되는 것보다 깁니다. 우리는 현재의 키 길이가 우리의 가장 큰 약점이라고 생각하지 않습니다. 특히 전통적이고 국가 수준이 아닌 적대자들에 대해서는 더욱 그렇습니다. 버그와 네트워크의 작은 규모가 훨씬 더 우려스럽습니다. 물론, 모든 암호화 알고리즘은 더 빠른 프로세서의 출현, 암호학 연구, 그리고 레인보우 테이블, 비디오 게임 하드웨어 클러스터 등과 같은 방법의 발전으로 인해 결국 구식이 됩니다. 불행히도 I2P는 하위 호환성을 유지하면서 키를 길게 하거나 공유 비밀 값을 변경하는 쉬운 메커니즘을 염두에 두고 설계되지 않았습니다.
더 긴 키를 지원하기 위해 다양한 데이터 구조와 프로토콜을 업그레이드하는 것은 결국 해결해야 할 과제이며, 다른 프로젝트들 과 마찬가지로 이는 대규모 작업이 될 것입니다. 신중한 계획을 통해 중단을 최소화하고, 향후 전환을 더 쉽게 만드는 메커니즘을 구현할 수 있기를 바랍니다.
향후에는 여러 I2P 프로토콜과 데이터 구조가 메시지를 임의의 크기로 안전하게 패딩하는 것을 지원할 예정이므로, 메시지를 일정한 크기로 만들거나 garlic 메시지를 무작위로 수정하여 일부 clove가 실제보다 더 많은 subclove를 포함하는 것처럼 보이게 할 수 있습니다. 하지만 현재로서는 garlic, tunnel, 그리고 종단 간 메시지에는 단순한 무작위 패딩이 포함되어 있습니다.
Floodfill 익명성 공격
위에서 설명한 floodfill DOS 공격 외에도, floodfill router들은 netDb에서의 역할과 네트워크 참가자들과의 높은 빈도의 통신으로 인해 네트워크 참가자들에 대해 학습할 수 있는 독특한 위치에 있습니다. 이는 floodfill router들이 전체 키스페이스의 일부분만 관리하고, 네트워크 데이터베이스 페이지 에서 설명한 바와 같이 키스페이스가 매일 순환하기 때문에 어느 정도 완화됩니다. router들이 floodfill들과 통신하는 구체적인 메커니즘은 신중하게 설계되었습니다. 그러나 이러한 위협들은 더 연구되어야 합니다. 구체적인 잠재적 위협과 해당 방어책은 향후 연구 주제입니다.
기타 네트워크 데이터베이스 공격
악의적인 사용자가 하나 이상의 floodfill router를 생성하고 이를 조작하여 잘못된, 느린, 또는 응답 없는 서비스를 제공함으로써 네트워크에 해를 끼치려 할 수 있습니다. 여러 시나리오가 network database 페이지 에서 논의됩니다.
중앙 자원 공격
공격받거나 공격의 경로로 사용될 수 있는 중앙화되거나 제한된 자원들이 몇 가지 있습니다 (일부는 I2P 내부에, 일부는 외부에 있음). 2007년 11월 jrandom의 부재와 이어진 2008년 1월 i2p.net 호스팅 서비스의 손실은 I2P 네트워크의 개발과 운영에서 수많은 중앙화된 자원들을 부각시켰으며, 이들 대부분은 현재 분산되어 있습니다. 외부에서 접근 가능한 자원에 대한 공격은 주로 새로운 사용자들이 우리를 찾는 능력에 영향을 미치며, 네트워크 자체의 운영에는 영향을 주지 않습니다.
- 웹사이트는 미러링되어 있으며 외부 공개 접근을 위해 DNS round-robin을 사용합니다.
- Router는 이제 다중 외부 reseed 위치 를 지원하지만, 더 많은 reseed 호스트가 필요할 수 있고, 신뢰할 수 없거나 악의적인 reseed 호스트 처리가 개선될 필요가 있습니다.
- Router는 이제 다중 업데이트 파일 위치를 지원합니다. 악의적인 업데이트 호스트가 거대한 파일을 제공할 수 있으므로 크기를 제한해야 합니다.
- Router는 이제 다중 기본 신뢰 업데이트 서명자를 지원합니다.
- Router는 이제 다중의 신뢰할 수 없는 floodfill 피어를 더 잘 처리합니다. 악의적인 floodfill에 대해서는 더 많은 연구가 필요합니다.
- 코드는 이제 분산 소스 제어 시스템에 저장됩니다.
- Router는 단일 뉴스 호스트에 의존하지만, 다른 호스트를 가리키는 하드코딩된 백업 URL이 있습니다. 악의적인 뉴스 호스트가 거대한 파일을 제공할 수 있으므로 크기를 제한해야 합니다.
- 주소록 구독 제공자, add-host 서비스, jump 서비스를 포함한 네이밍 시스템 서비스 가 악의적일 수 있습니다. 구독에 대한 상당한 보호 기능이 릴리스 0.6.1.31에서 구현되었고, 후속 릴리스에서 추가 개선사항이 있었습니다. 그러나 모든 네이밍 서비스는 어느 정도의 신뢰가 필요합니다. 자세한 내용은 네이밍 페이지 를 참조하세요.
- 우리는 여전히 i2p2.de의 DNS 서비스에 의존하고 있습니다. 이를 잃으면 새로운 사용자를 유치하는 능력에 상당한 지장을 초래하고, i2p.net의 손실과 마찬가지로 (단기에서 중기적으로) 네트워크를 축소시킬 것입니다.
개발 공격
이러한 공격은 네트워크를 직접 겨냥하는 것이 아니라, 소프트웨어 개발에 기여하는 모든 사람에게 법적 장애물을 도입하거나, 개발자들이 소프트웨어를 전복하도록 하기 위해 이용 가능한 모든 수단을 사용하여 개발팀을 공격합니다. 전통적인 기술적 대책으로는 이러한 공격을 막을 수 없으며, 만약 누군가가 개발자의 생명이나 생계를 위협하거나 (심지어 감옥에 갈 것이라는 위협과 함께 재갈 명령이 포함된 법원 명령을 내리기만 해도), 우리는 큰 문제에 직면하게 될 것입니다.
하지만 이러한 공격을 방어하는 데 도움이 되는 두 가지 기법이 있습니다:
- 네트워크의 모든 구성 요소는 검사, 검증, 수정 및 개선을 가능하게 하기 위해 오픈 소스여야 합니다. 개발자가 손상된 경우, 이를 발견하면 커뮤니티는 설명을 요구하고 해당 개발자의 작업을 더 이상 받아들이지 않아야 합니다. 우리의 분산 소스 제어 시스템에 대한 모든 체크인은 암호학적으로 서명되며, 릴리스 패키저들은 신뢰 목록 시스템을 사용하여 이전에 승인된 사람들로만 수정을 제한합니다.
- 네트워크 자체를 통한 개발로, 개발자들이 익명을 유지하면서도 개발 프로세스를 안전하게 보장할 수 있습니다. 모든 I2P 개발은 I2P를 통해 이루어질 수 있습니다 — 분산 소스 제어 시스템, IRC 채팅, 공개 웹 서버, 토론 포럼(forum.i2p), 그리고 소프트웨어 배포 사이트를 사용하여, 이 모든 것이 I2P 내에서 이용 가능합니다.
또한 필요시 법적 방어를 위해 법률 자문을 제공하는 다양한 기관들과의 관계를 유지하고 있습니다.
구현 공격 (버그)
아무리 노력해도 대부분의 중요한 애플리케이션은 설계나 구현에서 오류를 포함하게 되며, I2P도 예외가 아닙니다. I2P를 통해 실행되는 통신의 익명성이나 보안을 예상치 못한 방식으로 공격하는 데 악용될 수 있는 버그가 있을 수 있습니다. 사용 중인 설계나 프로토콜에 대한 공격에 견디기 위해, 우리는 모든 설계와 문서를 공개하고 많은 시선이 시스템을 개선할 것이라는 희망으로 검토와 비판을 요청합니다. 우리는 은밀함을 통한 보안은 믿지 않습니다.
또한 코드도 같은 방식으로 처리되고 있으며, 소프트웨어 시스템의 요구사항(수정 용이성 포함)을 충족하지 못하는 것을 재작업하거나 폐기하는 것에 대한 거부감이 거의 없습니다. 네트워크와 소프트웨어 구성 요소의 설계 및 구현에 대한 문서화는 보안의 필수적인 부분입니다. 이러한 문서 없이는 개발자들이 소프트웨어를 충분히 학습하여 결함과 버그를 식별할 수 있을 만큼 시간을 투자하려 하지 않을 것이기 때문입니다.
우리 소프트웨어는 특히 메모리 부족 오류(OOM)를 통한 서비스 거부 공격, router 콘솔의 크로스 사이트 스크립팅(XSS) 문제, 그리고 다양한 프로토콜을 통한 비표준 입력에 대한 기타 취약점과 관련된 버그를 포함할 가능성이 높습니다.
I2P는 여전히 작은 개발 커뮤니티를 가진 소규모 네트워크이며 학술 또는 연구 그룹의 관심은 거의 받지 못하고 있습니다. 따라서 다른 익명화 네트워크 가 받았을 수 있는 분석이 부족한 상황입니다. 우리는 계속해서 사람들이 참여하여 도움을 주도록 모집하고 있습니다.
기타 방어 기법
차단 목록
어느 정도까지는, I2P가 블록리스트에 등재된 IP 주소에서 운영되는 peer들을 피하도록 개선될 수 있습니다. 표준 형식으로 제공되는 여러 블록리스트들이 일반적으로 사용 가능하며, 이들은 안티-P2P 조직, 잠재적인 국가 수준 공격자 및 기타 등을 목록화하고 있습니다.
활성 peer들이 실제로 실제 차단목록에 나타나는 범위에서, 일부 peer들만 차단하는 것은 네트워크를 분할시키고, 연결성 문제를 악화시키며, 전반적인 신뢰성을 감소시키는 경향이 있습니다. 따라서 우리는 특정 차단목록에 합의하고 이를 기본적으로 활성화하고자 합니다.
블록리스트는 악의적인 행위에 대한 방어 체계의 일부분(아마도 작은 부분)일 뿐입니다. 프로파일링 시스템은 대부분 router 행동을 측정하는 데 좋은 성과를 보여주므로 netDb의 어떤 것도 신뢰할 필요가 없습니다. 하지만 할 수 있는 일이 더 있습니다. 위 목록의 각 영역에서 악성 행위를 탐지하는 개선사항을 만들 수 있습니다.
blocklist가 자동 업데이트와 함께 중앙 위치에서 호스팅되는 경우, 네트워크는 중앙 리소스 공격 에 취약해집니다. 목록에 자동으로 구독하면 목록 제공자가 I2P 네트워크를 완전히 차단할 수 있는 권한을 갖게 됩니다.
현재 우리 소프트웨어에는 과거 DOS 공격 소스의 IP만을 나열한 기본 차단 목록이 배포됩니다. 자동 업데이트 메커니즘은 없습니다. 특정 IP 범위가 I2P 네트워크에 심각한 공격을 가할 경우, 포럼, 블로그 등과 같은 대역 외 메커니즘을 통해 사람들에게 차단 목록을 수동으로 업데이트하도록 요청해야 합니다.