Адзін радок «апошні рукапаціск, дзве хвіліны таму» выглядае як доказ безупыннай актыўнасці, але ён слабейшы за гэта. Ён пазначае апошні завершаны абмен ключамі для аднаго вузла, які адбываецца па фіксаваным таймеры абнаўлення ключоў, пакуль ідзе трафік, і спыняецца, калі вузел змаўкае. Ці звязвае гэты час чалавека з чым-небудзь, залежыць ад ідэнтыфікатараў, захаваных побач, і гадзіннікаў абедзвюх сістэм. Вось як паводзіць сябе запіс у двух самых распаўсюджаных стэках і дзе яго чытанне ідзе не так.

Два запісы, два розныя значэнні

WireGuard трымае адзін адбітак часу рукапаціску на вузел, які замяняецца пры кожным абнаўленні ключоў, плюс лічыльнікі байтаў у кожным кірунку. OpenVPN звычайна запісвае пачатак сеансу, адключэнне і ўсё, што дадае наладжаная шматслоўнасць, што робіць адзінкай запісу сеанс, а не абмен ключамі.

Гэтая розніца вызначае, што значыць адсутнасць:

QuestionWireGuard handshakeOpenVPN session log
Did the peer send recently?Strong hint within the rekey windowNot answered by start time alone
Did the peer stop?Weak, because idle peers also stop rekeyingOnly if a disconnect was written
What was visited?NothingNothing

Чаму рукапаціск — не безупыннае выкарыстанне

WireGuard абнаўляе ключы прыкладна кожныя дзве хвіліны, пакуль ёсць даныя, якія трэба абараняць, а вузел, які прастойвае, проста спыняецца. Таму састарэлы рукапаціск можа значыць, што ноўтбук спіць, карыстальнік перастаў працаваць або сетка скінула пакеты, якія запусцілі б наступны абмен. Адбітак часу — гэта ніжняя мяжа актыўнасці, а не трэкер увагі.

Адваротная памылка гэтак жа лёгкая. Пастаянны трафік keepalive трымае тунель цёплым на прастойнай прыладзе, таму нядаўні рукапаціск можа з'явіцца на машыне, да якой ніхто не дакранаўся гадзіну. Тут дапамагаюць лічыльнікі байтаў, бо яны адрозніваюць вузел, які шле рэальныя даныя, ад таго, што абменьваецца толькі keepalive, і паведамляюць, які кірунак нёс аб'ём. Нішто з гэтага не выдае прызначэнне, старонку або запыт.

Ідэнтыфікатары падарожнічаюць разам з адбіткам часу

Час без уліковага запісу, публічнага ключа або адрасу крыніцы — сірата. Спалучыце адбітак часу з ідэнтычнасцю вузла, і назіранне становіцца супастаўляльным: публічны ключ застаецца пры змене адрасоў, а адрас крыніцы можа дзяліцца многімі абанентамі за трансляцыяй аператара.

Гэтая асіметрыя — тое, што большасць размоў пра прыватнасць прапускае. Адрас выглядае ананімным, бо ён агульны, а ключ выглядае тэхнічным, бо ён доўгі, але стабільны ідэнтыфікатар — менавіта ключ. Захаванне аднаго поля і адкіданне іншага змяняе рызыку карэляцыі, не змяняючы бачнай дакладнасці.

Сама карэляцыя — гэта задакументаваная праблема. Злучэнне часу падключэння з падзеяй уваходу ў пастаўшчыка, запытам у падтрымку або запісам аб плацяжы можа звязаць асобу з актыўнасцю, нават калі ніводнае прызначэнне ніколі не было запісана, і менавіта таму спалучэнне важнейшае за фарматаванне.

Міжсістэмная карэляцыя патрабуе ўвагі да гадзіннікаў

Дзве сістэмы, якія паведамляюць пра адзін і той жа момант, рэдка сыходзяцца да секунды. Адна можа ўжываць зрух часавага пояса ў вывадзе, другая можа працаваць на гадзінніку, які адстае на некалькі секунд, а віртуальная машына можа дрыфтаваць пасля прыпынку.

Перш чым рабіць выснову, што дзве падзеі адбыліся разам, перавядзіце абедзве ў адзін пояс і праверце зрух у сырым запісе, а не ў адлюстраванні. Калі разрыў, які вы вымяраеце, меншы за верагоднае адхіленне, у вас няма ніякага парадку.

Практычнае правіла — захоўваць дакладнасць, патрэбную задачы пошуку няспраўнасцей, і не больш. Колькасць сеансаў за гадзіну адказвае на пытанне даступнасці без захавання гісторыі па кожным уліковым запісе, а агрэгат можна захоўваць значна даўжэй, чым сырыя радкі, з якіх ён паходзіць.

Чытайце запіс камандамі, а не ўяўленнем

Выведзіце палі, пра якія збіраецеся разважаць, у адзінках, якія захоўвае інструмент, а не ў тых, якія адлюстроўвае панэль.

Гэтыя два радкі паказваюць узрост рукапаціску і лічыльнікі байтаў для кожнага вузла WireGuard, а затым падобны матэрыял з файла стану OpenVPN:

wg show all latest-handshakes
wg show wg0 transfer
cat /run/openvpn/server.status

Параўнайце ўзрост з інтэрвалам абнаўлення ключоў, перш чым рабіць выснову, і чытайце лічыльнікі разам з ім. Вузел з нядаўнім рукапаціскам і амаль без перадачы абменьваецца keepalive, а вузел з састарэлым рукапаціскам і вялікімі лічыльнікамі быў заняты, пакуль не спыніўся. Ні адзін з радкоў не кажа, што было зроблена, і сказаць гэта прама дакладней, чым намякаць, што адбітак часу даказвае наведванне.

Падобныя артыкулы