IoT ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•œ ๋„คํŠธ์›Œํฌ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ๋„๊ตฌ

IoT Inspector๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

IoT ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•œ ๋„คํŠธ์›Œํฌ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ๋„๊ตฌ
/ ์‚ฌ์ง„ ํ”ฝ์…€ PD

์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท ๋ณด์•ˆ ์ •๋ณด

์ปจ์„คํŒ… ํšŒ์‚ฌ์ธ Bain & Company(PDF, 1ํŽ˜์ด์ง€) ๊ทธ๋“ค์€ 2017๋…„๋ถ€ํ„ฐ 2021๋…„๊นŒ์ง€ IoT ์‹œ์žฅ ๊ทœ๋ชจ๊ฐ€ 235์–ต ๋‹ฌ๋Ÿฌ์—์„œ 520์–ต ๋‹ฌ๋Ÿฌ๋กœ ๋‘ ๋ฐฐ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํ™ˆ ๊ธฐ๊ธฐ์˜ ์ ์œ ์œจ 47์–ต ๋‹ฌ๋Ÿฌ๊ฐ€ ์†Œ์š”๋  ์˜ˆ์ •. ์ •๋ณด๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋“ค์€ ์ด๋Ÿฌํ•œ ์„ฑ์žฅ๋ฅ ์„ ์šฐ๋ คํ•˜๊ณ  ์žˆ๋‹ค.

์— Avast์— ๋”ฐ๋ฅด๋ฉด, 40%์˜ ๊ฒฝ์šฐ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์Šค๋งˆํŠธ ์žฅ์น˜์— ์ „์ฒด ํ™ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์œ„ํ—˜์— ๋น ๋œจ๋ฆฌ๋Š” ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์นด์Šคํผ์Šคํ‚ค ๋žฉ์—์„œ ์„ค๋ฆฝํ•˜๋‹ค, ์ž‘๋…„ 2017๋ถ„๊ธฐ์— ์Šค๋งˆํŠธ ๊ธฐ๊ธฐ๋Š” XNUMX๋…„ ์ „์ฒด๋ณด๋‹ค XNUMX๋ฐฐ ๋” ๋งŽ์€ ๊ณต๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ๊ธฐ๊ธฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด IT ๊ธฐ์—…๊ณผ ๋Œ€ํ•™์˜ ์ง์›๋“ค์€ ์ƒˆ๋กœ์šด ์†Œํ”„ํŠธ์›จ์–ด ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€ ํ”„๋ฆฐ์Šคํ„ด ๋Œ€ํ•™๊ต ์ถœ์‹  ๋งŒ๋“ค์–ด์ง„ Princeton IoT Inspector ๊ฐœ๋ฐฉํ˜• ํ”Œ๋žซํผ. IoT ๊ธฐ๊ธฐ์˜ ๋™์ž‘๊ณผ ์ž‘๋™์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ž‘๋™ ๋ฐฉ๋ฒ•

IoT Inspector๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์—์„œ IoT ์žฅ์น˜์˜ ํ™œ๋™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ARP ์Šคํ‘ธํ•‘. ์žฅ์น˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ™œ๋™์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์ต๋ช… ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ IP ๋ฐ MAC ์ฃผ์†Œ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ARP ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

class ArpScan(object):

    def __init__(self, host_state):

        assert isinstance(host_state, HostState)

        self._lock = threading.Lock()
        self._active = True

        self._thread = threading.Thread(target=self._arp_scan_thread)
        self._thread.daemon = True

    def start(self):

        with self._lock:
            self._active = True

        utils.log('[ARP Scanning] Starting.')
        self._thread.start()

    def _arp_scan_thread(self):

        utils.restart_upon_crash(self._arp_scan_thread_helper)

    def _arp_scan_thread_helper(self):

        while True:

            for ip in utils.get_network_ip_range():

                time.sleep(0.05)

                arp_pkt = sc.Ether(dst="ff:ff:ff:ff:ff:ff") / 
                    sc.ARP(pdst=ip, hwdst="ff:ff:ff:ff:ff:ff")
                sc.sendp(arp_pkt, verbose=0)

                with self._lock:
                    if not self._active:
                        return

    def stop(self):

        utils.log('[ARP Scanning] Stopping.')

        with self._lock:
            self._active = False

        self._thread.join()

        utils.log('[ARP Scanning] Stopped.')

๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„์„ํ•œ ํ›„ IoT Inspector ์„œ๋ฒ„๋Š” IoT ๊ฐ€์ ฏ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์‚ฌ์ดํŠธ, ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋นˆ๋„, ํŒจํ‚ท์„ ์ „์†ก ๋ฐ ์ˆ˜์‹ ํ•˜๋Š” ๋ณผ๋ฅจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ PD๊ฐ€ ์ „์†ก๋  ์ˆ˜ ์žˆ๋Š” ์˜์‹ฌ์Šค๋Ÿฌ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ macOS์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์—์„œ zip ์•„์นด์ด๋ธŒ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์›น์‚ฌ์ดํŠธ. ์„ค์น˜ํ•˜๋ ค๋ฉด macOS High Sierra ๋˜๋Š” Mojave, Firefox ๋˜๋Š” Chrome ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Safari์—์„œ๋Š” ์•ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ YouTube์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

์˜ฌํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ Linux์šฉ ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•˜๊ณ  XNUMX์›”์—๋Š” Windows์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๊ฒ ๋‹ค๊ณ  ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค GitHub์—์„œ.

์ž ์žฌ๋ ฅ๊ณผ ๋‹จ์ 

๊ฐœ๋ฐœ์ž๋“ค์€ ์ด ์‹œ์Šคํ…œ์ด IT ๊ธฐ์—…์ด IoT ๊ธฐ๊ธฐ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ทจ์•ฝ์ ์„ ์ฐพ์•„ ๋”์šฑ ์•ˆ์ „ํ•œ ์Šค๋งˆํŠธ ๊ธฐ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์ด๋ฏธ ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ ์ทจ์•ฝ์ ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IoT Inspector๋Š” ์•„๋ฌด๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ๋„ˆ๋ฌด ์ž์ฃผ ํ†ต์‹ ํ•˜๋Š” ์žฅ์น˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋„๊ตฌ๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ๋„ˆ๋ฌด ์ž์ฃผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋“ฑ ๋„คํŠธ์›Œํฌ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๋Š” ์Šค๋งˆํŠธ ์žฅ์น˜๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

IoT Inspector์—๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹คํ—˜์ ์ด๋ฏ€๋กœ ์•„์ง ๊ตฌ์„ฑ์ด ๋‹ค๋ฅธ ๋ชจ๋“  IoT ์žฅ์น˜์—์„œ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„๊ตฌ ์ž์ฒด๊ฐ€ ์Šค๋งˆํŠธ ๊ธฐ๊ธฐ์˜ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ €์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฃŒ ๊ธฐ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฒ„๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์ง€๋งŒ ์•ž์œผ๋กœ ํ”„๋ฆฐ์Šคํ„ด ๋Œ€ํ•™ ํŒ€์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„์ž…ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋Š” DDoS ๊ณต๊ฒฉ ํƒ์ง€ ํ™•๋ฅ ์„ 99%๊นŒ์ง€ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“ค์˜ ๋ชจ๋“  ์•„์ด๋””์–ด๋ฅผ ์ ‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด PDF ๋ณด๊ณ ์„œ.

๊ธฐํƒ€ IoT ํ”„๋กœ์ ํŠธ

JavaScript ๋ฐ HTML ๊ด€๋ จ ์„œ์ ์˜ ์ €์ž์ธ Danny Goodman๊ณผ ํ˜‘๋ ฅํ•˜๋Š” ๋ฏธ๊ตญ ๊ฐœ๋ฐœ์ž ๊ทธ๋ฃน์ด ์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท ์ƒํƒœ๊ณ„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋ฌผ ์‹œ์Šคํ…œ.

์ด ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ์Šค๋งˆํŠธ ํ™ˆ IoT ์žฅ์น˜๋ฅผ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ์ œ์–ด๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ œ์กฐ์—…์ฒด์˜ ์žฅ์น˜๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๊ณ  ๋ณ„๋„๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ ์ž‘์„ฑ์ž๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ, ๊ฐ€์ ฏ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ์žฅ์น˜ ๋ชฉ๋ก ํ”„๋กœ์ ํŠธ ์›น์‚ฌ์ดํŠธ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ. ๊ฑฐ๊ธฐ์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š” ์ถœ์ฒ˜ ะธ ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ.

๋˜ ๋‹ค๋ฅธ ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ - PrivateEyePi. ์ด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์˜ ์ž‘์„ฑ์ž๋Š” Raspberry Pi๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ์ธํ™”๋œ IoT ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜๊ณผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์ดํŠธ์—๋Š” ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋งŽ์€ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์„  ์ „ํ™” ์„ผ์„œ ๋„คํŠธ์›Œํฌ ์˜จ๋„, ์Šต๋„, ๋˜ํ•œ ๊ตฌ์„ฑ ํ™ˆ ๋ณด์•ˆ ์‹œ์Šคํ…œ.

IoT ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•œ ๋„คํŠธ์›Œํฌ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ๋„๊ตฌ
/ ์‚ฌ์ง„ ํ”ฝ์…€ PD

์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์˜ ๋ฏธ๋ž˜

์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ IoT ์‹œ์žฅ์— ์ ์  ๋” ๋งŽ์ด ๋“ฑ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. IoT ๋ถ„์•ผ์—์„œ๋„ ํ™œ๋™ํ•˜๋Š” Linux Foundation(์šด์˜ ์ฒด์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.) ์‚ฐ๋“ค๋ฐ”๋žŒ) ๊ทธ๋“ค์€ ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ๊ฐ€ ๋” ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜๊ฒฌ์€ ์ •๋ณด ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ "์ง‘๋‹จ ์ง€์„ฑ"์ด ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๊ธฐ์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์—์„œ ์šฐ๋ฆฌ๋Š” IoT Inspector์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ ์  ๋” ์ž์ฃผ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋ฉฐ ์ด ์žฅ์น˜ ๋ถ€๋ฌธ์„ ๋”์šฑ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

First Enterprise IaaS ๋ธ”๋กœ๊ทธ์˜ ๊ฒŒ์‹œ๋ฌผ:

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€