※当サイトの記事には、広告・プロモーションが含まれます。

Cisco IOSの簡易的エミュレーターcisshgoを導入してみたが廃止された「SHA-1」に依存してるし...

bitbank.cc

ナカモトサトシの正体を明かすと発表し、検証可能な証拠を提出するとしていたアルゼンチンのBitcoinカンファレンスであるLABITCONFは具体的な正体を明かすことはなく、「多くの人がその名を主張しているが、真実は一つ。私たち全員がサトシである」と宣言した。

ナカモトサトシの正体を明かすと発表したアルゼンチンのイベント、「我々皆サトシ」 | ビットバンクプラス

⇧ 事実だとしたら、とんだ茶番もいいところですな...

件の「X(旧:Twitter)」の投稿を確認したところ、

⇧ とあり、

『Miles de personas se adjudicaron el nombre, pero la realidad es una: TODOS SOMOS SATOSHI』

とのこと。

ちなみに、

getnews.jp

⇧とあり、

プレスリリース サトシ・ナカモトは11月1日のLABITCONFで自身の正体を明らかにする。

と言い切ってしまっているのよね。

11月1日は、

2008年11月1日、metzdowd.com内の暗号理論に関するメーリングリストにナカモトは電子通貨ビットコインに関する論文を発表し始めた。

サトシ・ナカモト - Wikipedia

ビットコインに関する論文が発表された日らしいですな。

仮に、件の「X(旧:Twitter)」の投稿がフェイクで無いとしたら、事前に虚偽の告知をしたことになるんだが、「アルゼンチン」は、そのあたりの規制が緩い感じなのかね?

Cisco IOSの簡易的なエミュレーターcisshgoとは

ネットの情報を漁っていたところ、

www.ntt-tx.co.jp

cisshgoは「はじめに」欄にも記載したように、Cisco IOS端末を疑似できる簡易シミュレータです。
準備は簡単で、Go言語で書かれたプログラムが動く環境で、gitからクローンするだけです。

多数のNW機器をシミュレートするcisshgoについて | NTTテクノクロスブログ

⇧上記サイト様で、「cisshgo」というライブラリが紹介されておりました。

github.com

cisshgo

Simple, small, fast, concurrent SSH server to emulate network equipment (i.e. Cisco IOS) for testing purposes.

https://github.com/tbotnz/cisshgo

⇧ なるほど、確かに「Cisco IOS」をエミュレートしているとありますな。

ほぼ、Goでできている。

なのだけど、

⇧ 2021年5月27日を最後にリリースが止まっている...

問題はまだありまして、「cisshgo」のSSHの暗号鍵の方式が「SHA1」という古いものになってしまっているようで、「Rocky Linux 9」で試すと、

SSHログインしようとして失敗する時のログ抜粋

ssh_dispatch_run_fatal: Connection to xxxx port xxx: error in libcrypto    

⇧ のようなエラーが出てSSHログインに失敗する。

ネットの情報を漁っていたところ、

www.unix-power.net

これについては以下のようにSHA1ポリシーをアクティブ化します。非奨励ですが必要がある場合は仕方がないので実施します。

AlmaLinux9 SSHクライアントについて

⇧ 上記サイト様によりますと、SSHサーバー側が対応していないので、SSHクライアント側で「SHA1」を有効にするしかないらしい...

「cisshgo」のリリースが止まっているのは、このあたりの対応で挫折したってことなんかな?

ちなみに、

news.mynavi.jp

米国国立標準技術研究所(NIST: National Institute of Standards and Technology)は12月15日(米国時間)、「NIST Retires SHA-1 Cryptographic Algorithm|NIST」において、暗号アルゴリズムSHA-1」を廃止すると伝えた。SHA-1の暗号ハッシュ関数はすでに脆弱と評価されており米国政府機関での利用廃止が発表されている。

暗号アルゴリズム「SHA-1」の廃止を発表、NIST | TECH+(テックプラス)

⇧ 上記サイト様によりますと、2022年12月15日に「SHA-1」は廃止が発表されたらしい。

「cisshgo」の最終リリースが、2021年5月27日になっているのだけど、開発が継続されていれば、流石に「SHA-1」の対応はしたはずと思われるので、理由は分からんけど開発が完全に終了したってことなんかね?

とは言え、他の候補としては、

  • Cisco Packet Tracer
    Cisco Network Academyのアカウント作成が必要
  • GNS3
    Cisco IOSの入手が必要

ぐらいしか無さそう...

そして、悲報...

「cisshgo」は、事前に用意されているテキストファイルの内容を出力するだけだったという残念な作りになっていた...

github.com

⇧ これでは、「Cisco IOS」のコマンドの練習にならないし、何の意味もないのである...

と言うか、「Cisco IOS」でも何でも無い、単なるモックのようなものというお粗末な代物になっているんだが...

ここから先は読んでも意味無いと思うので、お時間に余裕のある方や、意味無くても構わん、という奇特な方のみご照覧下さい。

Cisco IOSの簡易的エミュレーターcisshgoを導入してみたが廃止された「SHA-1」に依存してるし...

「WSL 2(Windows Subsystem for Linux 2)」の「Rocky Linux 9」内でgit cloneして試してみたいと思います。

冒頭の参考サイト様にあったように、git cloneしてきたファイルの内、

  • cisshgo/transcripts/transcript_map.yaml
  • cisshgo/Dockerfile

について手を加えてから、Dockerイメージを作成するようにしたいと思います。

環境としては、

ts0818.hatenablog.com

⇧ 上記の時のものを利用するとします。

rootユーザーでSSHログインとかできる状態になっています。

まずは、「WSL 2(Windows Subsystem for Linux 2)」の「Rocky Linux 9」の環境を起動し、SSHログインします。

「Docker」「Docker Compose」「Git」などはインストール済みです。

では、適当な作業ディレクトリに移動しておいて、git cloneします。

■cisshogoのGitリポジトリをgit cloneする

git clone https://github.com/tbotnz/cisshgo.git    

そしたらば、「cisshgo/transcripts/transcript_map.yaml」を編集します。

ディレクトリの移動

cd cisshgo

■viで「transcripts/transcript_map.yaml」を編集する

vi transcripts/transcript_map.yaml 

■transcripts/transcript_map.yaml

---
platforms:
  - csr1000v:
      vendor: "cisco"
      hostname: "cisshgo1000v"
      password: "admin"
      command_transcripts:
        "show ip interface brief": "transcripts/cisco/csr1000v/show_ip_interface_brief.txt"
        "show running-config": "transcripts/cisco/csr1000v/show_running-config.txt"
        "show version": "transcripts/cisco/csr1000v/show_version.txt"
        "terminal length 0": "transcripts/generic_empty_return.txt"
        "terminal width 511": "transcripts/generic_empty_return.txt"
        "write mem": "transcripts/cisco/csr1000v/write_mem.txt"
# 追記ここから
        "password ios123" : "transcripts/generic_empty_return.txt"
        "login" : "transcripts/generic_empty_return.txt"
# 追記ここまで
      context_hierarchy:
# 追記ここから
        "(config-line)#": "(config)#"
# 追記ここまで
        "(config)#": "#"
        "#": ">"
        ">": "exit"
      context_search:
# 追記ここから
        "line console 0": "(config-line)#"
# 追記ここまで
        "configure terminal": "(config)#"
        "enable": "#"
        "base": ">"

続いて、Dockerfileも編集します。

■viで「Dockerfile」を編集する

vi Dockerfile   

■Dockerfile

FROM golang:1.15.0-buster
ADD . /app
WORKDIR /app
ENV GO111MODULE=on
RUN go mod download
CMD go run cissh.go -listeners 1 

Dockerfileを元にDockerイメージを作成します。

■Dockerfileを元にDockerイメージ作成

docker build . -t cisshgo:latest

Dockerコンテナを生成・起動します。

■Dockerイメージを元にDockerコンテナを生成し、バックグラウンドで起動

docker run --name [コンテナ名] -d -p 127.0.0.2:222:10000 [Dockerイメージ名]:[DockerイメージTAG名] 

で、

rin-ka.net

OpenSSHは署名にSHA-1RSA鍵を利用していました。しかし、SHA-1は2005年に攻撃方法が発見された結果、2021年9月にリリースされたOpenSSH8.8で、SHA-1の鍵をデフォルトで無効化しました。

no matching host key type found:古いサーバーにSSH接続するとエラーが出る | りんか ネット

RHEL 9 ベースの OS は、SHA-1 を使用した接続機能が禁止されています。OSでSHA-1を禁止している場合は、sshサービスでSHA-1を有効化しても接続することができません。

no matching host key type found:古いサーバーにSSH接続するとエラーが出る | りんか ネット

RHEL 8 以降のOSは、アプリケーションに明示的に要求しない限り、ポリシーを満たさないアルゴリズムプロトコルの使用を拒否します。

no matching host key type found:古いサーバーにSSH接続するとエラーが出る | りんか ネット

⇧ ポリシーに「SHA1」を追加する必要があると。

2024年11月5日(火)追記:↓ ここから

何やら、

rheb.hatenablog.com

⇧ 直接編集は宜しくないっぽい。

qiita.com

⇧ 上記サイト様にありますように、既存のポリシーをコピーして編集するのが一般的な利用方法らしい。

2024年11月5日(火)追記:↑ ここまで

■ポリシーを確認する

update-crypto-policies --show   

■「DEFAULT」のポリシーを確認する

cat /usr/share/crypto-policies/policies/DEFAULT.pol

「DEFAULT」のポリシーに「SHA1」を追加します。

※ 追記にあった通り、本来は、ポリシーのファイルをコピーして、元のファイルは編集しない方が良いです。以下、元のポリシーのファイルを直接編集してしまっていますが...

SHA1関連のモジュールを追加

update-crypto-policies --set DEFAULT:SHA1    

■システム全体の暗号化ポリシーの状態を確認する

docker run --name [Dockerコンテナ名] --rm -d -p 222:10000 cisshgo:latest   

Dockerコンテナは起動していたので、Dockerコンテナ(cisshgo)にSSHログインする。

SSHログインする

ssh -p [Dockerコンテナを起動した際のホストのポート番号] admin@[DockerホストのIPアドレス]

⇧ ログインできたっぽい。

とりあえず、

zenn.dev

⇧ 上記サイト様の「モード」遷移図によると、SSHログイン直後は「ユーザーモード」になっているということみたい。

「モード」によって、

contenthub.netacad.com

www.cisco.com

⇧ 実行できるコマンドなどが異なるらしい。

で、謎なのが、

study-ccna.com

Privilege Level Security

Cisco IOS devices use privilege levels for more granular security and Role-Based Access Control (RBAC) in addition to usernames and passwords. There are 16 privilege levels of admins access, 0-15, on the Cisco router or switch that you can configure to provide customized access control. With 0 being the least privileged and 15 being the most privileged. These are three privilege levels the Cisco IOS uses by default:

  • Level 0 – Zero-level access only allows five commands- logout, enable, disable, help and exit.
  • Level 1 – User-level access allows you to enter in User Exec mode that provides very limited read-only access to the router.
  • Level 15 – Privilege level access allows you to enter in Privileged Exec mode and provides complete control over the router.

https://study-ccna.com/cisco-privilege-levels/

⇧「Cisco IOS」には「pivilege level」という概念があるらしく、全部で0~15までの16個ほど存在するらしいのだけど、どこにも各々の説明について言及してる情報が見当たらない...

16個存在している意味が全く分からんのだけど...

www.infraexpert.com

Cisco IOSではデフォルトで次の3つの特権レベルが存在します。

Cisco IOS - privilege levelとprivilege execの設定

特権レベルの制御はAAAサーバ側で実装させ
 ローカルユーザとして username ~ privilege 15 secret ~ だけを保持させておくという形が一般的です。

Cisco IOS - privilege levelとprivilege execの設定

 特権レベルが引上げられたり、引き下げられたりしたコマンドは以前の特権レベルでは発行できなくなります。
 特権レベルの確認は 
show privilege で分かります。これらの特権設定はAAAサーバ(TACACS+/RADIUS)や
 Ciscoルータの
ローカルで行えます。

Cisco IOS - privilege levelとprivilege execの設定

⇧「Cisco IOS」もブラックボックス過ぎるんだが...

前に、

ts0818.hatenablog.com

⇧「Cisco IOS」について調査した際に、

www.infraexpert.com

Cisco機器にアクセスする方法、つまりCisco機器のIOSにアクセスする方法は、大きく3種類あります。

Ciscoデバイスの操作 - Cisco IOSソフトウェアとは

⇧ 上記サイト様で、「Cisco IOS」搭載の機器へのアクセス方法は3つあり、一般的な「telnet接続」と「SSH接続」は、「Cisco IOS」では「VTY接続」と呼ぶそうな。

で、

tech.pjin.jp

なお、1921のコンソールポートはこのようになっています。

【独学CCNA】034.Cisco機器へのアクセス方法 | TECH PROjin

⇧「AUXポート」と「コンソールポート」の形状が同じにしか見えないんだが...

文字が消えたら判別できなくない?

必ず、どの機器についても上図のような位置関係になっているのであれば、混乱しないかもしれませんが...

Cisco IOS」は独自の仕様にも拘らず、ドキュメント化しないってのが謎過ぎるんだが...

次回は、「VTY接続」所謂、一般的には「SSH接続」できるユーザーを「Cisco IOS」に追加できるか試してみますか。

と思ったら、

github.com

⇧「transcript_map.yaml」にあるコマンドしか実行できないらしく、しかも出力内容が予めテキストに用意していた文字列を出力するだけだったという...

全くもって意味無いんだけど...

滅茶苦茶、時間を無駄にしてしまったではないか...

ただ、「Cisco IOS」のコマンドの練習、具体的には『「VTY接続」できるユーザーを追加する』をしたかっただけなんだが...

Cisco IOS」のコマンドの挙動が全く把握できないからして、「Cisco IOS」環境を壊してしまう未来しか見えて来ない...

毎度モヤモヤ感が半端ない…

今回はこのへんで。