Autor: Bruce Byfield
Format PDF pojawił się po raz pierwszy w 1992 roku i nic nie wskazuje na to, by miał zniknąć. Przeciwnie – stał się standardem biznesowym i jest preferowanym formatem wszędzie tam, gdzie liczy się układ elementów na stronie, a nie tylko sam tekst. Blisko spokrewniony z PostScriptem (PS), PDF ma jedną główną zaletę: czytelnik widzi plik dokładnie tak, jak jego twórca. Niestety, PDF pochodzi z epoki, w której prywatność i bezpieczeństwo nie miały tak wielkiego znaczenia jak dziś. Format ten zawiera co prawda pewne ustawienia dotyczące prywatności i bezpieczeństwa, ale według współczesnych standardów są one prymitywne. Złośliwi twierdzą nawet, że pliki PDF istnieją w jednym z dwóch stanów: przed atakiem i po. Na szczęście istnieją sposoby rozwiązania problemów, których nie rozwiązuje sam format PDF. Oprócz niezliczonych skryptów służących do edycji treści i struktury PDF, rośnie również liczba takich, które zwiększają prywatność i bezpieczeństwo.
Ochrona PDF hasłem jest nadal wykorzystywana – z tego prostego powodu, że jest powszechnie dostępna. Na przykład użytkownicy LibreOffice mogą ustawić hasło, wybierając Plik | Eksportuj jako | Eksportuj jako PDF... | Bezpieczeństwo. W tym menu można ustawić hasło umożliwiające otwarcie pliku PDF, a także zezwolić na to, czy i jak plik może być drukowany, edytowany lub kopiowany. Te ustawienia będą kontrolować sposób korzystania z pliku PDF przez niewyrafinowanych użytkowników, ale nie oprą się nowoczesnym narzędziom do łamania zabezpieczeń – ochronę hasłem można łatwo i szybko ominąć [1]. Sam LibreOffice zapewnia silniejszą ochronę dzięki opcji użycia podpisu cyfrowego lub osobistego klucza GPG po wybraniu opcji Plik | Eksportuj jako | Eksportuj jako PDF... | Opcje PDF | Podpisy cyfrowe (Rysunek 1). Ta opcja gwarantuje tożsamość nadawcy, ale nie obejmuje wszystkich okoliczności.
Poniżej prezentujemy kilka narzędzi, które można znaleźć w repozytoriach Debiana i innych głównych dystrybucji. Niektóre z nich mogą pełnić wiele funkcji, ale tutaj opiszemy tylko te ich aspekty, które są związane z prywatnością i bezpieczeństwem. Niektóre z nich nie mają nawet strony podręcznika systemowego – oferują tylko krótką pomoc, która powinna wystarczyć do zorientowania się, jak ich używać.
Pdfcrack
Gdziekolwiek używane są hasła, pojawiają się też użytkownicy, którzy od razu je zapominają. To z myślą o nich powstało narzędzie pdfcrack [2], choć oczywiście może być ono użyte niezgodnie z przeznaczeniem. Pdfcracka możemy użyć na dwa sposoby: przekazując mu ciąg znaków za pomocą opcji --charset NAPIS (-c NAPIS) (Rysunek 2) lib listę słów opcją --wordlist=PLIK (-w = PLIK). Korzystanie z listy słów – z których wiele jest dostępnych online – jest, ogólnie rzecz biorąc, najbardziej efektywne, chyba że podejrzewamy, jakie może być hasło i możemy użyć wyrażeń regularnych, aby zawęzić zakres wyszukiwania. Wyszukiwanie można dodatkowo ograniczyć poprzez pominięcie haseł zawierających mniej znaków niż określony limit za pomocą --minpw LICZBA (-n LICZBA) lub pominięcie haseł o długości większej niż dana liczba za pomocą --maxpw=LICZBA (-m LICZBA). Wielkość liter na początku hasła można również zignorować za pomocą --permutate (-s), opcji, która przypuszczalnie w zamierzeniu twórców miała służyć do wyszukiwania permutacji hasła, jednak ta funkcja nie została jeszcze zaimplementowana.

Rysunek 1: LibreOffice potrafi chronić pliki PDF za pomocą cyfrowego certyfikatu lub klucza szyfrowania.

Rysunek 2: pdfcrack używa szukanego ciągu do złamania hasła.

Rysunek 3: Narzędzie pdfsig z pakietu poppler-utils wykrywa podpisy cyfrowe.
Poppler-utils
Pakiet poppler-utils [3] to zbiór kilku najpopularniejszych narzędzi do manipulacji plikami PDF. Sprawdzając plik pod kątem prywatności lub bezpieczeństwa, możemy użyć kilku z tych narzędzi, aby wyświetlić lub wyodrębnić różne obiekty, by mieć pewność, że niczego nie pominęliśmy: pdfdetach użyjemy do wyodrębnienia plików osadzonych, pdfimages – obrazów, pdftotext – tekstu, zaś pdfinfo – struktury, JavaScriptu itp. Jednak z punktu widzenia bezpieczeństwa najbardziej przydatnym narzędziem z poppler-utils jest pdfsig (Rysunek 3), który weryfikuje podpisy cyfrowe, przeszukując bazę certyfikatów NSS w domyślnym profilu Firefoksa oraz w /etc/pki/nssdb. Ponadto pdfsig pokazuje tożsamość każdego podpisującego oraz godzinę i datę złożenia podpisu. Niestety program nie jest skonfigurowany do sprawdzania kluczy prywatnych i publicznych GPG.
QPDF
Wbrew wrażeniu, jakie można czasem odnieść, czytając wypowiedzi różnych osób w Internecie, QPDF [4] nie jest przeznaczony przede wszystkim do łamania plików PDF. Wielofunkcyjne polecenie qpdf konwertuje jeden typ pliku PDF na inny. Wśród jego funkcji są: linearyzacja (optymalizacja pod kątem sieci), tworzenie nowych plików, obracanie, scalanie i dzielenie plików oraz wybór zakresu stron do skopiowania do nowego pliku. Odszyfrowywanie i szyfrowanie to tylko część funkcji QPDF-a – program oferuje rozszerzone uprawnienia i wyższe bezpieczeństwo niż domyślne ustawienia PDF. Opcja --help wyświetla stronę pomocy podobną do strony podręcznika.
QPDF można skompilować z kilkoma różnymi opcjami szyfrowania [5]. Program można uruchomić z opcją --password=HASŁO. Jeśli plik ma więcej niż jedno hasło, opcję tę trzeba być użyć dla każdego hasła, chyba że wszystkie są takie same. Pełne odszyfrowanie jest stosunkowo proste – wystarczy przekazać programowi opcję --decrypt oraz wspomnianą wyżej --password=HASŁO. Innymi słowy, QPDF pozwoli nam odszyfrować plik, pod warunkiem że znamy już hasło – nie pozwoli nam w magiczny sposób zdjąć z PDF-a hasła, którego nie znamy.

Rysunek 4: Niektóre dane dotyczące wersjonowania pokazane przez pdfresurrect.
Szyfrowanie może być nieco bardziej skomplikowane. Najprostszym sposobem jest skopiowanie ustawień z innego pliku za pomocą --copy-encryption=FILE, tworząc w ten sposób nowy plik – nie ma przy tym znaczenia, czy znamy hasło, czy nie. Częściej jednak używana jest opcja --encrypt OPCJE. Zaszyfrowany plik można utworzyć za pomocą:
qpdf --encrypt DŁUGOŚĆ-KLUCZA FLAGI-DŁUGOŚCI-KLUCZA PLIK
qpdf --encrypt HASŁO-UŻYTKOWNIKA HASŁO-WŁAŚCICIELA DŁUGOŚĆ-KLUCZA -- ./WEJŚCIE.PDF ./WYJŚCIE.pdf
Powyższe polecenie utworzy plik wyjściowy, nie wyświetlając ekranie żadnych danych. DŁUGOŚĆ-KLUCZA może wynosić 40, 128 lub 256, przy czym każda długość klucza jest powiązana z różnymi flagami, które należy przekazać przed plikiem wejściowym, jak to opisano w opcji --help. Na przykład długość klucza wynosząca 40 umożliwia korzystanie z domyślnych uprawnień zawartych w standardzie PDF (ISO 32000). Długość klucza 128 obejmuje wszystkie opcje długości klucza 40 plus uprawnienia do innych zmian, takie jak uprawnienia do formularzy lub korzystanie z szyfrowania AES. Do tych uprawnień długość 256 dodaje obsługę V4 i przestarzałego szyfrowania RC5. Wszystkie te opcje i flagi można używać z opcją --password-mode, która określa sposób odczytywania haseł: dosłowny, kodowany w UTF-8, kodowany szesnastkowo lub automatycznie, w zależności od potrzeb. Każda z tych opcji może być używana z innymi opcjami QPDF-a, aby na przykład utworzyć zaszyfrowany plik z obróconymi stronami lub tylko wybranymi stronami.
Pdf-redact-tools
Cenzurowanie (redaction) polega na usunięciu prywatnych lub poufnych informacji przed publicznym udostępnieniem dokumentu. Często jest używane w połączeniu z publikacją oficjalnych dokumentów rządowych – można je poznać po zaciemnionych słowach lub akapitach. Bywa też przydatne w biznesie – najczęściej w przypadku publicznego udostępnienia dokumentu wewnętrznego. Narzędzie pdf-redact-tools [6] obsługuje cenzurowanie plików PDF, oferując trzy opcje. Program przekształca wszystkie strony pliku PDF na pliki PNG, które są zachowywane w nowym katalogu; operację tę można również wykonać ręcznie, konwertując plik PDF na wielostronicowy plik TIF. Jednak najbardziej użyteczną opcją jest --achromatic PLIK (-a PLIK), który konwertuje pliki kolorowe na czarno-białe w celu udaremnienia identyfikacji drukarki, z którą skojarzony jest dany plik poprzez użycie unikalnych kropek drukarskich – praktyka mało znana opinii publicznej, ale dobrze znana grupom zajmującym się prawami obywatelskimi i ekspertom ds. prywatności [7]. Również i tę opcję można by zaimplementować ręcznie w edytorze graficznym, takim jak Gimp – wygodniej jednak jest użyć dedykowanego narzędzia.
I tu jedna uwaga: narzędzie Pdf-redact-tools nie jest już rozwijane. Co więcej, autor sugeruje, by zamiast niego skorzystać z jednego z dwóch narzędzi. Pierwsze z nich to Qubes PDF Converter[9]: aplikacja wykorzystująca mechanizmy systemu operacyjnego QubesOS do przekształcenia dowolnego PDF-a (np. pobranego z Internetu) na bezpieczny, tj. taki, który nie powinien zawierać złośliwego kodu, a jedynie bitmapy z treścią PDF-a. Qubes PDF Converter wymaga jednak QubesOS-a. Jeśli nie korzystamy z tego systemy, wygodniej jest użyć drugiego systemu sugerowanego przez autora Pdf-redact-tools, czyli Dangerzone[10], który w roli piaskownicy zamiast maszyny wirtualnej wykorzystuje kontenery.
Pdfresurrect
Głównym zastosowaniem pdfresurrect [8] jest przeglądanie danych dotyczących wersji pliku. Używając -w, możesz przeglądać historię wersji, zaś -q zwraca tylko liczbę wersji, które zostały zapisane. Za pomocą -imożna wyświetlić obiekty w pliku, a także szczegóły dotyczące utworzenia pliku, o ile są dostępne (Rysunek 4). Każda z tych informacji może być źródłem potencjalnych problemów – na przykład przechowywanie wersji może służyć jako dowód, że plik został zmieniony, lub twórcę pliku można obciążyć odpowiedzialnością za jego zawartość. Aby uniknąć tego rodzaju problemów, możemy użyć -s, aby wyczyścić wszystkie te informacje.
Modernizacja plików PDF
Format PDF ma swoje źródło w czasach, kiedy użytkownicy sieci mieli do siebie większe zaufanie. Chociaż prawdopodobnie miliony użytkowników korzystają z jego domyślnych ustawień, nie są one już wystarczające, jeśli chodzi o prywatność i bezpieczeństwo; zmieniły się również standardy szyfrowania. Jednak największym problemem jest możliwość osadzenia w plikach PDF złośliwego kodu – jeśli więc często pobieramy PDF-y z Internetu, warto skorzystać z narzędzia takiego jak Dangerzone, by uniknąć przykrych niespodzianek.
Info
[1] PDF insecurity: https://www.locklizard.com/password-protect-pdf/
[2] pdfcrack: https://sourceforge.net/projects/pdfcrack/files/pdfcrack/pdfcrack-0.19/
[3] poppler-utils: https://pkgs.org/download/poppler-utils
[4] QPDF: https://qpdf.sourceforge.io/
[5] QPDF options: https://qpdf.sourceforge.io/files/qpdf-manual.html#ref.basic-options
[6] pdf-redact-tools: https://github.com/firstlookmedia/pdf-redact-tools
[7] Printer dots: https://www.bbc.com/future/article/20170607-why-printers-add-secret-tracking-dots
[8] pdfresurrect: https://github.com/enferex/pdfresurrect
[9] Qubes PDF Converter: https://github.com/QubesOS/qubes-app-linux-pdf-converter
[10] Dangerzone: https://dangerzone.rocks/