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 entries from March 2020 listed from newest to oldest.

February 2020 is the previous archive.

April 2020 is the next archive.

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