in-toto -- Securing the whole software supply chain
Santiago Torres-Arias, Hammad Afzali, Lukas Pühringer, Reza Curtmola, Justin Cappos
How is software made? 2 A stylized software supply chain test - - PowerPoint PPT Presentation
in-toto -- Securing the whole software supply chain Santiago Torres-Arias, Hammad Afzali, Lukas Phringer , Reza Curtmola, Justin Cappos How is software made? 2 A stylized software supply chain test code build package 3 Attackers can
Santiago Torres-Arias, Hammad Afzali, Lukas Pühringer, Reza Curtmola, Justin Cappos
2
3
code build test package
4
code build test package
5
6
7
8
9
10
11
code build test package
12
code build test package
→ git signing, reference state log [Torres USENIX Sec 16], ...
13
code build test package
→ TPMs, HSMs, reproducible builds, ... → git signing, reference state log [Torres USENIX Sec 16], ...
14
code build test package
→ TPMs, HSMs, reproducible builds, ... → TLS, GPG, TUF → git signing, reference state log [Torres USENIX Sec 16], ...
15
16
code build test package
17
→ Verifiably define the steps of the software supply chain → Verifiably define the authorized actors → Guarantee that everything happens according to definition, and nothing else
{ "_type": "layout", "expires":"2017-08-31T12:44:15Z", "keys": { "0c6c50": { ... } }, "signatures": [...], "steps": [{ "_type": "step", "name": "checkout-code", "expected_command": ["git", "clone", "..."], "expected_materials": [], "expected_products": [ ["CREATE", "demo-project/foo.py"], ...], "pubkeys": ["0c6c50..."], "threshold": 1 }, ...], "inspections": [...] }
18
{ "_type": "layout", "expires":"2017-08-31T12:44:15Z", "keys": { "0c6c50": { ... } }, "signatures": [...], "steps": [{ "_type": "step", "name": "checkout-code", "expected_command": ["git", "clone", "..."], "expected_materials": [], "expected_products": [ ["CREATE", "demo-project/foo.py"], ...], "pubkeys": ["0c6c50..."], "threshold": 1 }, ...], "inspections": [...] }
19
Bob Carol Dave Erin
{ "_type": "layout", "expires":"2017-08-31T12:44:15Z", "keys": { "0c6c50": { ... } }, "signatures": [...], "steps": [{ "_type": "step", "name": "checkout-code", "expected_command": ["git", "clone", "..."], "expected_materials": [], "expected_products": [ ["CREATE", "demo-project/foo.py"], ...], "pubkeys": ["0c6c50..."], "threshold": 1 }, ...], "inspections": [...] }
20
Bob Carol Dave Erin
{ "_type": "layout", "expires":"2017-08-31T12:44:15Z", "keys": { "0c6c50": { ... } }, "signatures": [...], "steps": [{ "_type": "step", "name": "checkout-code", "expected_command": ["git", "clone", "..."], "expected_materials": [], "expected_products": [ ["CREATE", "demo-project/foo.py"], ...], "pubkeys": ["0c6c50..."], "threshold": 1 }, ...], "inspections": [...] }
21
Bob Carol Dave Erin
{ "_type": "layout", "expires":"2017-08-31T12:44:15Z", "keys": { "0c6c50": { ... } }, "signatures": [...], "steps": [{ "_type": "step", "name": "checkout-code", "expected_command": ["git", "clone", "..."], "expected_materials": [], "expected_products": [ ["CREATE", "demo-project/foo.py"], ...], "pubkeys": ["0c6c50..."], "threshold": 1 }, ...], "inspections": [...] }
22
Bob Carol Dave Erin Alice
{ "_type": "Link", "name": "code", "byproducts": {"stderr": "", "stdout": ""}, "command": [...], "materials": {}, "products": { "foo": {"sha256": "..."}}, "return_value": 0, "signatures": [...] } { "_type": "Link", "name": "build", "byproducts": {"stderr": "", "stdout": ""}, "command": [...], "materials": {...}, "products": { "foo": {"sha256": "..."}}, "return_value": 0, "signatures": [...] } { "_type": "Link", "name": "build", "byproducts": {"stderr": "", "stdout": ""}, "command": [...], "materials": {}, "products": { "foo": {"sha256": "..."}}, "return_value": 0, "signatures": [...] } { "_type": "Link", "name": "build", "byproducts": {"stderr": "", "stdout": ""}, "command": [...], "materials": {}, "products": { "in-toto/.git/HEAD": {"sha256": "..."}}, "return_value": 0, "signatures": [...] }
23 $ in-toto-run -- ./do-the-supply-chain-step
24
fetch
(dget)
extract
(dpkg-source)
modify
(interactive)
build
(dpkg-buildpackage)
25 $ in-toto-run <opts> -- dget http://cdn.debian.net/debian/pool/main/g/grep/grep_2.12-2.dsc $ in-toto-run <opts> -- dpkg-source -x grep_2.12-2.dsc $ cd grep-2.12 $ in-toto-record start <opts> $ dch -i $ vi debian/rules $ in-toto-record stop <opts> $ in-toto-run <opts> -- dpkg-buildpackage -us -uc $ in-toto-verify --layout-keys <key> --layout grep_2.12-2.layout
→ goo.gl/hgPMHA (demo screencast + demo metadata)
26
fetch
(dget)
extract
(dpkg-source)
modify
(interactive)
build
(dpkg-buildpackage)
27
28
https://in-toto.io/ jcappos@nyu.edu