ブログ

Armadillo: TCP/UDPポート開放状態、アプリケーション起動状態の確認方法

at_syunya.ohshio
2017年12月28日 17時09分

本ブログでは、各Armadillo製品のTCP/UDPポート(以下ポートと記述)開放状態及びアプリケーション起動状態の確認方法をご紹介します。

Armadillo製品は、利用者が円滑な開発を行うために多くのポートを開放しています。
しかし各利用者が量産時に必要なポートは異なるため、開放しているポートの一部が不要となることもあります。
製品化されたArmadilloが「不要開放ポートを使用するアプリケーションを起動しており、通信可能な状態である」場合、その製品のセキュリティが弱くなる場合があります。
そのため量産前に使用しているArmadilloがどのポートを開放し、各ポートに対応するアプリケーションが起動しているか確認する必要があります。
今回の確認では、デフォルト設定のLinuxカーネル/ユーザランドを使用しています。

iptablesを用いた開放ポートの確認

Armadillo上からポート開放状態を確認する方法についてご紹介します。
確認コマンドとして、[iptables]コマンドを使用します。
例としてArmadillo-IoT G3上で使用した例を次に記載します。

[armadillo ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

上記結果では、INPUT,OUTPUTの[policy]が[ACCEPT]となっており、ルールが設定されていません。
このためポートはすべて開放されていることがわかります。

次に、Armadillo-440上でコマンドを実行した例を記載します。

[armadillo ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:telnet
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:snmp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data
REJECT     tcp  --  anywhere             anywhere             tcp dpt:auth reject-with icmp-port-unreachable
DROP       tcp  --  anywhere             anywhere             tcp dpts:x11:6010
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:1024:65535
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ntp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:snmp
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere             udp dpt:22222
ACCEPT     udp  --  anywhere             anywhere             udp dpts:1024:65535

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

この結果から、[policy]は[DROP]となっていますが[INPUT]の[ACCEPT]ルールが存在しており、この数だけポートが開放されていることが分かります。
FTPなどを用いるアプリケーションが起動してしまうと、思わぬセキュリテホールとなる可能性があるため不要な開放ポートは閉鎖すると安全です。

ネットワーク情報表示コマンドを用いた起動アプリケーションの確認

次にArmadilo上からアプリケーション起動状態を確認する方法についてご紹介します。
確認コマンドとして、[netstat]コマンドを使用します。
[netstat]コマンドをArmadillo-IoT G3上で使用した例を次に記載します。

[armadillo ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:http                  *:*                     LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
udp        0      0 *:38848                 *:*
udp        0      0 *:mdns                  *:*
udp6       0      0 [::]:36247              [::]:*
udp6       0      0 [::]:mdns               [::]:*
Active UNIX domain sockets (servers and established)
--------------以下略-----------------

この結果から、[tcp]に関するポートでは[http]アプリケーションのみ起動していることがわかります。
またArmadillo-440上で実行した例を次に記載します。

[armadillo ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:x11             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ftp             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:telnet          0.0.0.0:*               LISTEN
tcp        0      0 :::x11                  :::*                    LISTEN
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp        0      0 :::5353                 :::*
Active UNIX domain sockets (servers and established)
--------------以下略-----------------

この結果から、[tcp]の[http][ftp][telnet]がアクティブになっているため、[iptables]で調べた開放ポートに対応したアプリケーションが起動していることがわかります。
ftpやtelnetのポートを使用せずに開放だけしている状態は、セキュリティが弱くなってしまうため対策する必要があります。

ATDEからポートスキャナを用いた開放済ポートの確認

ATDEからポートスキャナを用いて、使用しているArmadilloの通信状況を確認します。
ポートスキャナとは、スキャン対象機が「どのポートでサービスを提供しているか」を確認するソフトウェアです。
今回は[nmap]コマンドというセキュリティ/ポートのスキャンを行うことができるツールを使用します。
ArmadilloとPCをLAN接続し、ATDEから[nmap]コマンドを実行します。
次のコマンド例はArmadillo-IoT G3Lに対してコマンド実行したものです。

atde:~/$ nmap [ArmadilloのIPアドレス]

Starting Nmap 6.00 ( http://nmap.org ) at 2017-12-28 15:12 JST
Nmap scan report for [ArmadilloのIPアドレス]
Host is up (0.0060s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

結果を確認すると[TCP/80:http]と通信できることがわかります。
一方で、Armadillo-440に対して[nmap]を行うと次のような結果が得られます。

atde:~/$ nmap [ArmadilloのIPアドレス]

Starting Nmap 6.00 ( http://nmap.org ) at 2017-12-28 16:52 JST
Nmap scan report for [ArmadilloのIPアドレス]
Host is up (0.0010s latency).
Not shown: 841 closed ports, 156 filtered ports
PORT   STATE SERVICE
21/tcp open  ftp
23/tcp open  telnet
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 10.40 seconds

この結果から、[TCP/80:http]に加えて[TCP/21:ftp]と[TCP/23:telnet]と通信できることがわかります。

ポートスキャン結果一覧

以下に、各製品のデフォルトで開放しているポートの一覧表を記載します。

製品名 開放ポート
Armadillo-IoT G3/G3L TCP/80:http
Armadillo-X1 TCP/80:http
Armadillo-IoT G2 TCP/80:http,TCP/21:ftp,TCP/23:telnet
Armadillo-440 TCP/80:http,TCP/21:ftp,TCP/23:telnet
Armadillo-840 TCP/80:http,TCP/21:ftp,TCP/23:telnet