PC・スマホ関連
ネットワークプリンタを利用できなくさせる方法
Takeyuki Sato
こんにちは。
今回は、LANに繋がっているプリンタに対するDos攻撃の種類について書きます。
多くのページ記述言語がありますが今回は広く使われるpostscriptが使えるプリンタである前提です。
*この記事は、攻撃を促す記事では決してありません。あくまで、学術的に脆弱性を知るという目的にで書いております。ご理解ください。
概要
プリンタに対するサービス拒否攻撃の方法は、大きく3つあります。
- 印刷ジョブをし続ける攻撃
- ページ記述言語の無限ループや関数を再定義させて止まらせる攻撃
- プリンタが持つメモリの最大書き込み回数を爆上げする攻撃
印刷ジョブをし続ける攻撃
サービス妨害と言ったらこれですね!
プリンタは基本的にある一つのジョブを実行している間は、他のジョブを処理しません。そのジョブが終わるか、タイムアウトが来るまで正規のユーザーが入る余地がありません。ということで、
while true; do nc プリンターのアドレス 9100; done
コネクションを切ってどんどん新しいジョブを発生させます。
また、PJLでは、変数PJL SET TIMEOUTによりタイムアウトの時間を設定できますがその設定を爆上げすることもできます。
すると、攻撃者がアクセスする回数を少なくしながら攻撃時間を長く持てます。
ページ記述言語の無限ループや関数を再定義させて止まらせる攻撃
クライアントからプリンタへ印刷処理を行う時、ページ記述言語を送信することによりプリンタは文章のレイアウトを理解します。
しかし、その記述言語も繰り返し処理などが当然あるためDos攻撃に利用されてしまいます。
%!
{} loop
上はpostscriptで無限ループを行う処理です。プリンタのジョブはこのループから抜けられないためジョブが終了できず正規のユーザーが困ります泣。
また、postscriptのshowpageという命令は、最終的に描画をする命令です。このshowpageの以下のように定義を空っぽにすることでいつまでたっても印刷されずにジョブを実行し続けます。
true 0 startjob
/showpage {} def
プリンタが持つメモリの最大書き込み回数を爆上げする攻撃
プリンタや組み込み機器の長期的に保存する情報を保存する時に不揮発性メモリをしようします。すると、書き込み回数に制限がありますので繰り返し長期的に保存するデータの変更をしていると書き込みできなくなります泣。そのことを利用して、サービス妨害をします。しかし、残念ながらこの方法は、普通の印刷機能に影響を与えることができません泣。
重要な設定ができなくなるだけです。例えば以下のようにデフォルトで何部コピーするかの設定を繰り返し設定させてメモリの寿命をいただきます。
@PJL DEFAULT COPIES=[何部]
まとめ
プリンタにおけるサービス妨害攻撃でした。
この他にもプリンタは、コマンドインジェクションやjobに侵入する方法などあります!
絶対にみんなが使っているプリンタに対してやらないでください。