gamzatti: March 2020 Archives

最近、明るいニュースやイベントが少なくなりがちで、気分が沈んでいる方もいらっしゃるかと思います。

私も、少し最近そんな感じです。

気分転換の方法は色々あると思うのですけれど、私個人は何かに集中するようにしています。

時間が空くと、ネガティブな事を考えてしまったりしがちなので、とにかく空いた時間を作らないことかなと。

今日は、最近よく使うWebサイトへのリクエストを自動化するプログラムを作っていました(笑)

Burpをプロキシとして使うと、BurpがHTTPS対応のWebサーバとなり、リクエストを仲介する事でHTTPSのリクエストの中身も見れるので、リクエストやレスポンスの内容を調べたい時などに便利です。

また、私は昔は断然Java派でしたが、ここ数年はPythonも便利だなと思うようになりました。何よりコンパイル不要ですし、型宣言が不要なのも昔は違和感があったのですが、慣れると楽でいいなと思えるようになりました。コードが短くて済むのがいいですね。私はあまり使わないですが、関数で複数値をリターンできるのも驚きでした。

前書いたSSHリモートデバッグも便利です。

ただ、とにかく遅い。。大量ログのパースなどには向かない感じがします。

同じ事をJavaでやると一瞬で終わるのですけどね^^;

どちらかというとPythonは検証&研究向き、Javaは商用向きなのかもしれません。

Python-opcuaその2

gamzatti
Vote 0 Votes

http://www.reverse-edge.com/mt/blog/2020/02/python-opcua.htmlでPython-opcuaライブラリの使い方について書きましたが、追加で分かったことについて。

OPC-UAの主なセキュリティ機能には、クライアント証明書とユーザ認証があります。
クライアント証明書を使って接続するには、クライアント証明書と秘密鍵を生成し、set_securityの第一、第二引数に指定します。第三引数はサーバ証明書を指定します。
----
pc = getattr(security_policies, 'SecurityPolicy' + "Basic256Sha256")
client.set_security(pc, "certificate-example.der", "private-key-example.pem", "UaServer.der", ua.MessageSecurityMode.SignAndEncrypt)
client.application_uri = "urn:example.org:FreeOpcUa:python-opcua"
----

なおクライアント証明書には、URIのフィールドが必要で、上記で指定するapplication_uriと一致している必要があります(これで結構ハマりました。。)
opnsslコマンドで生成した証明書にはURIフィールドが入らないため、接続できず、Python-OPCUAのサンプルで入っていたcertificate-example.derを使いました。
クライアント証明書には、URIのフィールドがあるかは、以下のコマンドで確認できます。
$ openssl x509 -in xx.der -inform der -text -noout | grep URI

ユーザ認証を行う場合は、以下のように書きます。
----
client = Client("opc.tcp://Administrator@192.168.2.30:52240")
client.set_password('password')
----

これはあくまでPython-OPCUAのサンプルですが、実際のOPC-UAサーバの製品では、サーバ側でクライアント証明書をトラストリストに入れたり、ユーザを登録したりする処理が必要です。

OPC-UAクライアントのサンプルコードは以下にコミットしています。

https://github.com/sisoc-tokyo/AttackDemoTookkit_Industry4/blob/master/tools/opc-ua/examples/client-cirt-auth.py

なお、Security ModeとSecurity PolicyがNoneで、Anonymous接続を許可していると、セキュリティ強度は最も低くなりますので、注意が必要です。
通信は暗号化されず、攻撃者はOPC-UAサーバのURIさえ分かれば、通信盗聴したり、認証なしで不正接続ができてしまいます。

Security ModeとSecurity Policyを設定し、ユーザ認証を有効にしておくことをオススメします。

About this Archive

This page is an archive of recent entries written by gamzatti in March 2020.

gamzatti: February 2020 is the previous archive.

gamzatti: April 2020 is the next archive.

Find recent content on the main index or look in the archives to find all content.