Slide 1

Slide 1 text

KLAB EXPERT CAMP ੒Ռൃද খ໺ ً໵

Slide 2

Slide 2 text

ࣗݾ঺հ • ๺ւಓେֶ ৘ใΤϨΫτϩχΫεֶՊ 4೥ • དྷ೥͸୤๺͠·͢ • seccamp(2018), SecHack365(2017) খ໺ ً໵ @teru0x1

Slide 3

Slide 3 text

ࢲͷςʔϚ RustͰTCPͷ࣮૷

Slide 4

Slide 4 text

ͳͥRUST͔ • CݴޠฒΈͷߴ͍ύϑΥʔϚϯε • ܕ҆શੑɺϝϞϦ҆શੑ - ະఆٛಈ࡞͕ൃੜ͠ͳ͍ - ແޮͳϙΠϯλ͸࡞੒͞Εͳ͍ʢؔ਺͔ΒϩʔΧϧม਺΁ͷϙΠ ϯλΛฦ͢ͳͲʣ - ίϯύΠϧ௨ͬͨ࣌ͷ҆৺ײ͕͍͢͝ • ߴ͍දݱྗ(ΫϩʔδϟɺΠςϨʔλ) • ॆ࣮ͨ͠ඪ४ϥΠϒϥϦʢϋογϡςʔϒϧɺλϓϧʣ

Slide 5

Slide 5 text

࢓༷ͳͲ • TCPͷιέοτϥΠϒϥϦͱͯ͠ΞϓϦέʔγϣϯ͔Βར༻Ͱ͖Δ Α͏ʹͨ͠ • ࣮૷ͨ͠API - connect(): 3-way-handshakeΛߦ͍઀ଓΛཱ֬͢Δ - bind(): Ϧεχϯάιέοτͷੜ੒ɺࢦఆͨ͠ΞυϨεͰϦοεϯ - accept(): ઀ଓࡁΈιέοτΛฦ͢ - read(): ઀ଓࡁΈιέοτ͔ΒಡΈࠐΉ - write(): ઀ଓࡁΈιέοτ΁ॻ͖ࠐΉ • ࠶ૹ੍ޚ

Slide 6

Slide 6 text

࣮૷ʹ͍ͭͯ • TCP/IPࣗ࡞ຊɺmicropsͷ࣮૷Λ͔ͳΓࢀߟʹͨ͠ɻ • l3·Ͱ͸pnetΫϨʔτΛར༻ʢνΣοΫαϜͳͲ͸ϥΠϒϥϦΛ࢖ ͏ʣ • ϥΠϒϥϦΛར༻͢ΔΞϓϦέʔγϣϯͱͯ͠͸echoαʔόɺΫϥ ΠΞϯτΛ࡞੒ͨ͠ɻ

Slide 7

Slide 7 text

8/26 • ඈߦػͰඈΜͰ͘Δ • ݐ෺ͷೖΓํ͕Θ͔Βͳ͔ͬͨ • ͓ण͓͍͍࢘͠ • APIͷ਽ܗΛ࡞Δ • ઃܭʹۤ࿑͢ΔʢTCPͷ؅ཧςʔϒϧͲ͜ʹ࣋ͨͤΑ͏ʁʣ

Slide 8

Slide 8 text

8/27 • 3-way-handshakeୡ੒

Slide 9

Slide 9 text

8/28 • connect(), read(), write()Λ࣮૷ • TCPΫϥΠΞϯτͷػೳ͸׬ྃ • bind()Λ࣮૷ɺαʔόʔͬΆ͍͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨ • ͜ͷ࣌͸1ϙʔτ1઀ଓͩͬͨ

Slide 10

Slide 10 text

8/29 • accept()Λ࣮૷ • ࠶ૹ੍ޚΛ࣮૷

Slide 11

Slide 11 text

σϞ • ಈ͍͍͓ͯͩ͘͞ئ͍͠·͢ • echoαʔό͸VMʢUbuntuʣ, ΫϥΠΞϯτ͸macOSͰ͢

Slide 12

Slide 12 text

େมͩͬͨͱ͜Ζ • ࣗ࡞TCP͕৐͍ͬͯΔVMͷΧʔωϧ͕֎෦͔ΒདྷͨSYNʹରͯ͠ RSTΛฦ͢ - iptablesͰ֎޲͖ͷRST͸υϩοϓͨ͠ • RustͷίϯύΠϧΛ௨͢͜ͱ

Slide 13

Slide 13 text

͞Γ͛ͳ͘એ఻ • ιέοτϓϩάϥϛϯά • ύέοτΩϟϓνϟ • ϙʔτεΩϟϯπʔϧ • non-blocking web αʔό • DHCPαʔό

Slide 14

Slide 14 text

ײ૝ͳͲ • TCP׬શʹཧղͨ͠ งғؾ͕গ͠Θ͔ΔΑ͏ʹͳͬͨ - ίωΫγϣϯ؅ཧͷख๏͕Θ͔ͬͨ - ঢ়ଶΛ࣋ͭͱҰؾʹෳࡶʹͳΔ • 1೔ʹҰճ͸σουϩοΫͰϋϚͬͨ - Ͱ΋ɺʮσουϩοΫͯ͠ΔΑʂʯͱॲཧܥ͕ڭ͑ͯ͘ΕΔ • ggͬͯ΋ग़ͯ͜ͳ͍ਂ͍஌ࣝʹ͍࣭ͭͯ໰Ͱ͖ͯษڧʹͳͬͨɻ • ߨٛͷํ΋ฉ͍ͯΈ͔ͨͬͨ • Rust͸͍͍ͧʂʂʂʂʂʂʂʂʂ ϝϯλʔ͞Μɺνϡʔλʔ͞ΜɺӡӦ͞Μɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ