Commits

Anonymous committed 040779d

README

Comments (0)

Files changed (2)

+Bezpieczeństwo pypi i pip
+=========================
+
+Etapy, na których należy zapewnić bezpieczeństwo
+------------------------------------------------
+
+    * Upload paczki do centralnego repozytorium pypi
+
+        * Jak uploader jest uwierzytelniany?
+        * Czy upload odbywa się bezpiecznym połączeniem? Czy HTTPS, SSH?  
+          Czy zawsze?
+        * Jak szerokie uprawnienia ma się po uwierzytelnieniu? Jakie 
+          paczki można modyfikować?
+
+    * Ściągnięcie paczki i jej zależności z repozytorium
+
+        * Weryfikacja sum kontrolnych paczki i zależności
+        * Sumy jedynie MD5
+        * Skąd pobrać sumy kontrolne?
+            * udostępnione w opisach paczek (human-readable) -- 
+              specjalna notacja linków z ``#md5=``
+
+                * pip (wersja: Debian 1.1-3) ignoruje ten dopisek mimo 
+                  wzmianki w dokumentacji [1]_,
+                * taki schemat działania nie przewiduje uzyskania sum 
+                  dla zależności.
+            * w podkatalogu ``/simple`` repozytorium.
+
+        * Uwierzytelnianie sum kontrolnych [2]_ z podkatalogu 
+          ``/simple`` mirrora
+
+            * ``/simple``, ``/serversig``, ``serverkey``
+            * ``serverkey`` pobierany przez HTTPS z użyciem certyfikatu 
+              znanego CA
+
+    * Problem braku podpisów OpenPGP na paczkach i metod automatycznej 
+      ich weryfikacji
+
+Przykład
+--------
+
+Należy wykonać komendy:
+
+    ::
+        
+        wget https://pypi.python.org/serverkey
+        wget -O netaddress-simple http://d.pypi.python.org/simple/netaddress/
+        wget -O netaddress-serversig http://d.pypi.python.org/serversig/netaddress
+        openssl dgst -verify serverkey -signature netaddress-serversig netaddress-simple
+
+Na tym etapie rozstrzygnięte zostało, czy lista sum kontrolnych jest 
+poświadczona przez serwis pypi. Teraz można przystąpić do sprawdzenia, 
+czy sumy dla paczki oprogramowania pokrywają się z właśnie zweryfikowaną 
+listą (``netaddress-simple``).
+
+Zaufanie co do autorstwa paczki zależy od wiary w metody 
+uwierzytelnienia i autoryzacji serwisu pypi.
+
+Całą procedurę (z pominięciem ponownego ściągania ``serverkey``) należy 
+powtórzyć dla każdej paczki.
+
+Kod programu ``verify.py``, który przeprowadza taką weryfikację, 
+dostępny w podkatalogu tools repozytoriów [9]_ i [10]_.
+
+Przykład skryptu shellowego mojego autorstwa do weryfikacji  
+(``verify.sh``) dostępny w tym repozytorium.
+
+
+
+.. [1] http://www.pip-installer.org/en/latest/usage.html#package-checksum-hashes
+.. [2] http://www.python.org/dev/peps/pep-0381/
+
+.. [3] http://pyvideo.org/video/638/advanced-security-topics
+.. [4] http://davidfischer.name/2012/05/signing-and-verifying-python-packages-with-pgp/
+.. [5] https://github.com/pypa/pip/issues/425
+.. [6] https://github.com/pypa/pip/pull/402
+.. [7] http://superuser.com/questions/451772/do-pip-and-easy-install-download-python-packages-securely
+.. [8] https://www.updateframework.com/wiki/SecuringPythonPackageManagement
+
+.. [9]  https://bitbucket.org/tarek/pypi/overview
+.. [10] https://bitbucket.org/loewis/pypi/overview
+
+.. vi: ft=rst
+pypi and pip security
+=====================
+
+Steps to secure
+---------------
+
+    * Package upload to the central pypi repository
+
+        * How is the uploader authenticated?
+        * Are packages uploaded using a secure connection? HTTPS, SSH?  
+          Is it used at all times?
+        * How privileged is the user after authentication? Which 
+          packages one can modify?
+
+    * Downloading the package and its dependencies
+
+        * Sums verification of the package and its dependencies
+        * Only MD5 sums available
+        * Where one can get sums from?
+            * package descriptions (human-readable) -- special suffixes 
+              in links (``#md5=``)
+
+                * pip (version: Debian 1.1-3) ignores this suffix 
+                  despite being mentioned in the documentation [1]_,
+                * this method doesn't provide sums checking for 
+                  dependencies.
+            * in the repository's subdirectory ``/simple``.
+
+        * Authenticating sums [2]_ from the ``/simple`` subdirectory of 
+          a mirror
+
+            * ``/simple``, ``/serversig``, ``serverkey``
+            * ``serverkey`` fetched via HTTPS using a well-known CA 
+
+    * Lack of OpenPGP signatures on packages and no method to verify 
+      them automatically
+
+Example
+-------
+
+Execute following commands:
+
+    ::
+        
+        wget https://pypi.python.org/serverkey
+        wget -O netaddress-simple http://d.pypi.python.org/simple/netaddress/
+        wget -O netaddress-serversig http://d.pypi.python.org/serversig/netaddress
+        openssl dgst -verify serverkey -signature netaddress-serversig netaddress-simple
+
+At this point it is known if the sums list is authenticated by pypi. Now 
+one can start checking if the sum for the package matches the one on the 
+list (``netaddress-simple``).
+
+Trust in who the actual author of a package is depends solely on the 
+trust in authentication and authorization procedures of the pypi 
+service.
+
+The whole procedure (excluding ``serverkey`` download) has to be 
+repeated for every package.
+
+Source code of ``verify.py`` -- a verification tool, is available in the 
+``tools`` subdirectory in the repositories [9]_ i [10]_.
+
+An example of a verification shell script written by me (``verify.sh``) 
+is included in this repository.
+
+
+
+.. [1] http://www.pip-installer.org/en/latest/usage.html#package-checksum-hashes
+.. [2] http://www.python.org/dev/peps/pep-0381/
+
+.. [3] http://pyvideo.org/video/638/advanced-security-topics
+.. [4] http://davidfischer.name/2012/05/signing-and-verifying-python-packages-with-pgp/
+.. [5] https://github.com/pypa/pip/issues/425
+.. [6] https://github.com/pypa/pip/pull/402
+.. [7] http://superuser.com/questions/451772/do-pip-and-easy-install-download-python-packages-securely
+.. [8] https://www.updateframework.com/wiki/SecuringPythonPackageManagement
+
+.. [9]  https://bitbucket.org/tarek/pypi/overview
+.. [10] https://bitbucket.org/loewis/pypi/overview
+
+.. vi: ft=rst