5

checksumPolicy=fail基本的なアプローチを超えた厳格なMaven依存関係ポリシーを適用したいと思います。

これは、 「依存関係チェーン攻撃」としても知られる有効なダイジェスト値をまだ持っている、変更されたリリース依存関係に対する保護を提供する試みです。

この状況は、次のシナリオから発生する可能性があります。

  • 依存関係は更新されましたが、作成者はバージョン番号を更新しておらず、以前のリリースを上書きすることができました(またはリポジトリアカウントが侵害されています)
  • 中間者攻撃が実施されています(オンザフライの書き換え/ハッシュを使用)
  • リポジトリ自体が危険にさらされています

他の開発者との話し合いでは、上記に対抗するための1つのアプローチは、pom.xmlに既知のMD5 / SHAダイジェストのリストを作成し、ダウンロードした依存関係に同じダイジェストがあることをMavenに確認させることです。これにより、ソースコードリポジトリが安全である限り、侵害された依存関係が検出されます。

したがって、私の質問は2つあります。

  1. より効率的に機能する代替アプローチはありますか?
  2. この仕事をする既存の実装/プラグインはありますか?
4

2 に答える 2

7

誰かがこの問題に取り組んでいる場合は、それに対処するMaven Enforcer プラグインルールを作成しました。予想される SHA1 ハッシュ値を含むアーティファクト URN のリストを指定し、これが実際にビルドで使用されているものであることをエンフォーサーに確認させることができます。

これは MIT ライセンスの下で Maven Central から入手でき、GitHub のソース コードはhttps://github.com/gary-rowe/BitcoinjEnforcerRulesにあります。

このプロジェクトは Bitcoinj ライブラリ用であることを示していますが、実際には、セキュリティを意識したビルド プロセスに含めることができる汎用ソリューションです。また、既存のプロジェクトをスキャンして問題のある領域を特定し、ホワイトリストを自動的に作成します。

以下は、プロジェクトで使用するために必要な構成の例です。

<build>
  <plugins>
    ...
      <!-- Use the Enforcer to verify build integrity -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.2</version>
        <executions>
          <execution>
            <id>enforce</id>
            <phase>verify</phase>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <digestRule implementation="uk.co.froot.maven.enforcer.DigestRule">

                  <!-- Create a snapshot to build the list of URNs below -->
                  <buildSnapshot>true</buildSnapshot>

                  <!-- List of required hashes -->
                  <!-- Format is URN of groupId:artifactId:version:type:classifier:scope:hash -->
                  <!-- classifier is "null" if not present -->
                  <urns>

                    <urn>antlr:antlr:2.7.7:jar:null:compile:83cd2cd674a217ade95a4bb83a8a14f351f48bd0</urn>
                    <urn>dom4j:dom4j:1.6.1:jar:null:compile:5d3ccc056b6f056dbf0dddfdf43894b9065a8f94</urn>
                    <urn>org.bouncycastle:bcprov-jdk15:1.46:jar:null:compile:d726ceb2dcc711ef066cc639c12d856128ea1ef1</urn>
                    <urn>org.hibernate.common:hibernate-commons-annotations:4.0.1.Final:jar:null:compile:78bcf608d997d0529be2f4f781fdc89e801c9e88</urn>
                    <urn>org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final:jar:null:compile:3306a165afa81938fc3d8a0948e891de9f6b192b</urn>
                    <urn>org.hibernate:hibernate-core:4.1.8.Final:jar:null:compile:82b420eaf9f34f94ed5295454b068e62a9a58320</urn>
                    <urn>org.hibernate:hibernate-entitymanager:4.1.8.Final:jar:null:compile:70a29cc959862b975647f9a03145274afb15fc3a</urn>
                    <urn>org.javassist:javassist:3.15.0-GA:jar:null:compile:79907309ca4bb4e5e51d4086cc4179b2611358d7</urn>
                    <urn>org.jboss.logging:jboss-logging:3.1.0.GA:jar:null:compile:c71f2856e7b60efe485db39b37a31811e6c84365</urn>
                    <urn>org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.0.Final:jar:null:compile:2ab6236535e085d86f37fd97ddfdd35c88c1a419</urn>

                    <!-- A check for the rules themselves -->
                    <urn>uk.co.froot.maven.enforcer:digest-enforcer-rules:0.0.1:jar:null:runtime:16a9e04f3fe4bb143c42782d07d5faf65b32106f</urn>

                  </urns>

                </digestRule>
              </rules>
            </configuration>
          </execution>
        </executions>

        <!-- Ensure we download the enforcer rules -->
        <dependencies>
          <dependency>
            <groupId>uk.co.froot.maven.enforcer</groupId>
            <artifactId>digest-enforcer-rules</artifactId>
            <version>0.0.1</version>
          </dependency>
        </dependencies>

      </plugin>
    ...
  </plugins>
</build>
于 2013-06-16T21:58:33.490 に答える
2

リポジトリ自体にとっては良い仕事のように思えます。同様の質問に関するこの他のスレッドを確認してください。

私は Nexus での PGP 署名シナリオに精通していませんが、それは良いスタートだと思いますか?

于 2013-01-08T14:47:33.083 に答える