web-dev-qa-db-ja.com

Jenkinsが使用しているパスワード暗号化

Jenkinsジョブのxmlを変更しています。パスワードであるフィールドがあります。 xmlを取得すると、それが生のパスワードであった場所にハッシュがあります。

私が必要なのは、生のパスワード値からこのハッシュを作成する方法を知ることです。

  <scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
    <username>user</username>
    <password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
  </scm>

私はJenkins source code を読んでおり、HudsonPrivateSecurityRealm.Javaクラスが関係していると思いますが、saltパラメーターについてはわかりません。

PS:これは、Jenkinsのパスワード用ではありません。これは、ジョブ構成にパスワードフィールドがあるプラグイン用です。

23
Fran b

実際、ハッシュではなく、暗号化されたパスワードです。暗号化キーはマスターノードに保存されていると思います。実際、マスターのスクリプトコンソールで次のgroovyスクリプトを実行することにより、パスワードを解読できます

import hudson.util.Secret

def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")
println(secret.getPlainText())

パスワードを暗号化する場合は、

import hudson.util.Secret

def secret = Secret.fromString("your password")
println(secret.getEncryptedValue())

キーはランダムに生成され、異なるマシンでは明らかにキーが異なるため、コンピューターで暗号化されたパスワードは特定のコンピューターでのみ復号化できます。

詳細については core/src/main/Java/hudson/util/Secret.Java をご覧ください

37
tartakynov

別の可能性は、Jenkins Groovyコンソールを介してGroovyスクリプトを実行することです(JENKINS_URL/scriptでアクセスできます)。

println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")) 

Pythonを使用すると、他の方法もいくつか可能になります。

https://github.com/tweksteen/jenkins-decrypt
https://Gist.github.com/menski/8f9980999ed43246b9b2

18
CSchulz

Jenkinsは、すべての暗号化に AES-128-ECB を使用します。基本的に、master.keyファイルを使用して、hudson.util.Secretファイルに保存されているキーを暗号化します。このキーは、credentials.xmlのパスワードの暗号化に使用されます。

したがって、Jenkinsのパスワードを解読するには、基本的にhudson.util.Secretおよびmaster.keyファイルにアクセスする必要があります。 hudson.utils.SecretクラスとそのfromStringメソッドを調べることで、Jenkinsがパスワードを暗号化する方法を正確に確認できます。基本的に、パスワードはKEYを使用して暗号化される前にマジックと連結されます。

詳細については、 Jenkinsの資格情報ストレージ を確認してください。


パスワードを復号化するには、次の手順を実行します。

  1. Jenkinsで管理者としてログインしながら、/scriptページにアクセスします。
  2. 次のコマンドを実行します。

    println(hudson.util.Secret.decrypt("{XXX=}"))
    

    または:

    println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
    

    ここで、{XXX=}は暗号化されたパスワードです。これにより、プレーンパスワードが出力されます。

    逆に実行するには、次を実行します:

    println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
    

ソース: tuxfight3r/jenkins-decrypt.groovyの要点


または、次のスクリプトを確認してください: tweksteen/jenkins-decryptmenski/jenkins-decrypt.py

9
kenorb