Lantern: исходный код, и другие странности

Репозитарий Lantern

Бинарный код собран из недоступных исходных кодов.

Сравнение на примере сообщения из логов об ограничениях на проксируемые порты назначения:

Исходный код (скачать), версия 6.10.5

Port not allowed

Бинарник (скачать), версия 6.10.5

port %d not proxyable

При этом ваш запрос идет напрямую.

I confirm your observation. lantern-6.10.5.tar.gz contains the string Port not allowed but does not contain the string port %d not proxyable. update_linux_386.bz2 contains port %d not proxyable but not Port not allowed.

$ sha256sum lantern-6.10.5.tar.gz update_linux_386.bz2 
691168b2480f46ec3748acfc847a7d1bff52b20a9d44dd5fca113700e4aaa29e  lantern-6.10.5.tar.gz
3f67d2639dfb47f2cd4969d45e46571ff74b36b3789a90dd9c56f5ed9c9ce760  update_linux_386.bz2

$ tar xf lantern-6.10.5.tar.gz
$ rg 'Port not allowed' lantern-6.10.5
lantern-6.10.5/archive/src/github.com/getlantern/http-proxy/httpconnect/httpconnect.go
93:     f.ServeError(op, w, req, http.StatusForbidden, "Port not allowed")

lantern-6.10.5/archive/src/github.com/getlantern/flashlight/client/client.go
228:    log.Tracef("Port not allowed, bypassing proxy and sending CONNECT request directly to %v", addr)
$ rg 'proxyable' lantern-6.10.5

$ bzip2 -dc update_linux_386.bz2 | rg -a 'Port not allowed'
$ bzip2 -dc update_linux_386.bz2 | rg -a proxyable
^processor\s+(\d+):.*_cgo_unsetenv missing...HashedNotCorrectport %d not proxyablepragma sync...

Also interesting to note, the matches for Port not allowed in the source code do not correspond to what is currently publicly available. In the http-proxy repository, the httpconnect subdirectory was removed in 2017. https://github.com/getlantern/flashlight does not exist currently.

@anonymous37, if you download and compare different source code releases, what differences are there?

Архивы с исходным кодом повторяют содержимое репозитария, но он превратился в архив on Jun 20, 2019. Через год это заметили участники Википедии.

Репозитарий живет изменением ссылок на бинарный код, открытая разработка не ведется с Nov 4, 2016

Есть и другие признаки прекращения разработки с использованием открытого кода, например комментарий в репозитарии для андроида, где разработка закончилась в 2015

Development moved to the private repo

Тихо и незаметно для публики.

Блокировка в РФ

Сигнатура Lantern по версии ТСПУ выглядит так:

  • Множество подключений к неизвестным служебным адресам по хорошо известным подсетям
  • Подключение к неизвестному адресу прокси из хорошо известных подсетей

Правило блокировки разбито на две части:

  • Блокируют сессию прокси, следующую за подключениями к служебным адресам
  • Блокируют адреса всех новых подключений к прокси

Две части работают (работали) независимо, чужой клиент прыгающий по подсетям прокси устроит (при неизвестных условиях) ложные блокировки. Как при этом влияет возможный NAT провайдера и топология, учитывается ли адрес источника – неизвестно.

Воспроизвести блокировки вне лаборатории для десктоп версии Lantern оказалось сложней, чем это выглядит в сетевом дампе на локалхосте. Еще сложнее воспроизвести вторую часть блокировки чужим клиентом.

Это не окончательное или достоверное наблюдение. Правило блокировки сложное для наблюдателя, но использование истории соединений подтверждается.

Indeed, the “source code” downloads for each release are just a copy of the archived getlantern/lantern repository, which rarely changes.

Between changes, the contents of the source code downloads are identical, except for the version number in filenames. The source code for version 6.10.5 (April 2022) is the same as for 6.10.3 (March 2022). 6.9.13 (March 2022) is the same as 6.6.0 (May 2021).

$ du -b lantern-*.tar.gz
25020819        lantern-6.10.3.tar.gz
25020702        lantern-6.10.5.tar.gz
14512472        lantern-6.6.0.tar.gz
14515907        lantern-6.9.13.tar.gz
14514863        lantern-6.9.4.tar.gz

$ diff -u <(tar -tf lantern-6.10.3.tar.gz --strip-components=1 --show-transformed-names) <(tar -tf lantern-6.10.5.tar.gz --strip-components=1 --show-transformed-names); echo $?
0

$ diff -u <(tar -tf lantern-6.6.0.tar.gz --strip-components=1 --show-transformed-names) <(tar -tf lantern-6.9.13.tar.gz --strip-components=1 --show-transformed-names); echo $?
0

That’s disappointing. The page https://getlantern.org/faq/ (archive) claims that source code is available.

Can I trust Lantern?

Lantern is open, anyone can check our source code to see how everything works and make an informed decision. We welcome experts to audit our system and would appreciate any feedback (security@getlantern.org).

(However, that version of the FAQ may no longer be maintained: the newer page https://getlantern.org/en_US/faq.html (archive) does not have the claim.)