This version is deprecated, only download the latest version. Keep the
array in place to easily add the next version in the future.
Bug: 409884646
Test: atest NetworkSecurityUnitTests
Flag: EXEMPT bug fix
Change-Id: Ia367c0c796ba56a470edcbfa0bc93213c4829d3f
The DataStore is now unused and can be safely removed. See b/407940468
for more details on why this preferences file was removed.
Fixes: 407940468
Test: atest NetworkSecurityUnitTests
Flag: com.android.net.ct.flags.certificate_transparency_service
Change-Id: Ic4427958acef94984f728398bdb9a6f7e53a9cbe
The ct.preferences file has caused some issues (e.g. b/404408218), and
now that the logic of the logging is on every log list update (as
opposed to a certain number of consecutive failures), there is limited
utility in still relying on the DataStore to maintain a number of
crashes as this can be aggregated on the server side anyways.
Bug: 407940468
Test: atest NetworkSecurityUnitTests
Flag: com.android.net.ct.flags.certificate_transparency_service
Change-Id: I63bd9d87e1abd74c112485e8debfa284b81cc1ad
We are trying to reduce the usage of the DataStore, as
it has caused the occasional headache in the past (see
for example ag/32804820).
This CL removes the storing download IDs on disk. Storing
the download IDs is unnecessary anyway, we schedule a new
download on a system_server or device reboot anyway.
Bug: 407940468
Test: atest NetworkSecurityUnitTests
Flag: com.android.net.ct.flags.certificate_transparency_service
Change-Id: I18bc752aa26978f877f669d343d5432f83a36ae4
This CL adds a check to make sure the public key downloaded by the CTDownloader
matches a known allowlist of keys. If the key does not appear in the allowlist,
we cannot make guarantee that the key has not been tampered with, so we will not
proceed with the downloads of the CT log list and its signature.
Bug: 374719543
Test: atest NetworkSecurityUnitTests
Change-Id: I185a2330d9a4d138c93522cd4b22920e8a2412a2
System crashes are occurring for partners (b/396308673) due to the DataStore failing to load. While we investigate the underlying cause, add IllegalArgumentExceptions to the catch clause to prevent the fatal exception from being thrown.
Change-Id: I99e72af60064e2f0a5eed69c4f82b6cc69ee5f66
Fixes: 396308673
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
The signature should be logged _before_ decoded from the Base64
encoding in order to properly compare with what is published on gstatic.
Bug: 391327942
Bug: 378626065
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
Change-Id: Ibde2d4f45b998f764e2cb8d0772a0536ff763a4a
This CL adds the parsed log list timestamp from the JSON log list, as
well as logging a SUCCESS event (with timestamp and signature) when the
log list has been successfully updated.
Fixes: 391327942
Fixes: 394278886
Bug: 378626065
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
Change-Id: I8f0d96ca96cd89dce5da588cb478f9332537df48
individually passed parameters
This CL also moves the DataStore updates of the failure count into
CTLogger directly (CTDownloader will only modify the failure count on
complete success).
Note: due to limitations with Mockito (not being able to mock static
classes like the auto-generated CTStatsLog), there is no test class for
CTLoggerImpl.
Bug: 394278886
Bug: 378626065
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
Change-Id: I4498bfe75e84c6ba1654cfa55912c46836f61e03
As previously discussed, we will be logging the signature to help with
on-path attacker detection. See go/ct-android-notes for summary of the past
discussions. SignatureVerifier has been modified to return a status
object to better capture the various potential signature verification
failure statuses.
The log list timestamp will be added in a later change as
this will require modifying CompatibilityVersion's logic.
Bug: 378626065
Bug: 391327942
Bug: 394278886
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
Change-Id: I33d08b2d8c0260237bb3c5a66770fdf409adf8b1
All of the auto-generated enum naming in CTStatsLog is over 100+ chars
long, causing there to be numerous lint errors. This CL creates an
intermediate enum to make it easier to reference these status enums
without introducing lint warning fatigue.
Bug: 378626065
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
Change-Id: I451a006961ee5d801b3fbf702d3f5282d0b02242
The current implementation does not delete the CompatibilityVersion
directory if the killswitch is activated while the device is powered
off.
This CL fixes the bug and centralizes the handling of the killswitch
inside the CertificateTransparencyJob class, instead of spreading it
among multiple classes. Hopefully this change makes the killswitch
logic easier to follow and less-prone to mistakes.
Bug: 384688420
Test: adb shell device_config put network_security CertificateTransparencyLogList__service_enabled true/false
Flag: com.android.net.ct.flags.certificate_transparency_service
Change-Id: Ic1d0d78879753abc42829be18ce15f32a86532c5
The atom no longer just represents log list update failures, and will
instead be representing the entire log list update result regardless of
success or failure.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: Ide254542aeb9c9657e79a154e53f651478bb1a54
Previously, we would only log to statsd if a default threshold of 10 had
been met to avoid noise in the logs. Because we will instead be logging
every time a log list update happens (success or failure), we are
removing this threshold logic.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: Id3ad2c75fcceb3c15add70d4263f6c443f145348
This CL updates all usages of the atom FKA CertificateTransparencyLogListUpdateFailed, as it's now been renamed to CertificateTransparencyLogListUpdateStatusChanged to include more generic status updates beyond failures.
Change-Id: I32ac454a46d0dd2e10d1ac6388d25c8d5d199f79
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
To simplify debugging, we are planning to publish the log list signature
as a Base64 encoded string.
It might take a while for the changes to the signature publishing pipeline
to reach prod, and we do not know exactly when that will happen. To avoid
accidental crashes, I added a fallback path to the verifier code that
reverts to use the signature as raw (not Base64 encoded) bytes. I will
remove the fallback path once the signature publishing changes are
finalized.
Bug: 374719543
Test: atest NetworkSecurityUnitTests
Change-Id: Ia785b554b840940dc81b47ac9bc2121c0b410ab0
In aosp/3434620 the logic of the DirectoryUtils#makeDir method
was changed to use dir.mkdirs() instead of dir.mkdir(). This
resulted in an issue where the permissions were not properly
set for the CT root directory.
Also, add tests to presubmit set for networksecurity.
Bug: 377276991
Test: atest --test-mapping packages/modules/Connectivity/networksecurity
Change-Id: I8a41224bf425b4ec869dc1ee087e8efda4644423
update failures to statsd
This will allow it easier to debug the logging logic, without needing to
hit the default threshold of 10.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests && tested flag behavior manually
Change-Id: I10c652615e78a700bb84aabaa37ddc850e031e56
Instead of the boolean flag tracking that we are logging only once, use
an int to store the failureReason instead.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: Ifcdb599f39bb8e1ce9c8b4a8d27fb4500df23256
CTLogger
This CL adds a new API that will convert the
DownloadManager.COLUMN_REASON into the relevant proto failure reason
enum value. The reason why it is a new API rather than reusing an
existing one is because the parameter type is the same (int), so a
separate API will keep it clearer when the DownloadManager value vs. proto enum value is directly used.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: I9028ba8f2cb95ccc6d21b19c58e0d15a9405c3f7
The task of installing a new log list is now performed by the
CompatibilityVersion class.
Also, each CompatibilityVersion provides the URLs hosting the signature
and log list files. We do not store that information in the DataStore.
Change-Id: I36b585dc6984278de1ab3e6f3dc872e22f06ebea
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 377276991
Test: atest NetworkSecurityUnitTests
This change makes CTLogger into a public interface and reduces the
visibility of the actual implementation to package-private, as it was only made
public to allow for testing via mocking.
Flag: com.android.net.ct.flags.certificate_transparency_service
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: Ifeab50244219396ba3d3fc7f87b8d6e31ff726c9
Enabling the killswitch will scheduele the CT job and initialize the downloader.
Disabling the killswitch will remove the scheduled job, unregister the downloader and delete the compatibility version directory.
Also, remove the CertificateTransparencyFlagsListener as it is deprecated.
Bug: 384688420
Change-Id: I23d2201e22f305284ac47f521258f856b8a9efc2
Flag: com.android.net.ct.flags.certificate_transparency_service
Test: atest NetworkSecurityUnitTests
verification
Note: InvalidKeyExceptions may be thrown for other reasons (e.g.
signature algorithm not matching), hence the addition of a new Exception
to specify when the public key is missing.
Flag: com.android.net.ct.flags.certificate_transparency_service
Fixes: 384931263
Bug: 378626065
Test: atest NetworkSecurityUnitTests
Change-Id: I67341b1e2d169cf634e45ca84eb24e3a1f6d887e
The failure count for CTLogListUpdateFailed is an integer, not a long.
We need APIs in DataStore to handle this different data type, as
otherwise it will result in an unnecessary cast from long <-> int, which
is a lossy conversion.
Bug: 384473786
Test: atest NetworkSecurityUnitTests
Change-Id: I3b31fc9faef4ac0dec77bc5adb8235a155a4a3d1
We plan on only logging failure metrics after 10
consecutive failures, so we need some way of storing it.
Fixes: 384473786
Test: atest NetworkSecurityUnitTests
Change-Id: Ib316309864c536893d08be2dc59b8a70965ebde6
Instead of defining our own action we can use the @SystemApi already
defined in ConfigUpdate.
Flag: android.security.Flags.certificate_transparency_configuration
Bug: 319829948
Test: atest NetworkSecurityUnitTests
Change-Id: Ibb3a534c0e0dca12a075d031983a8ee754261abd
Flag is already enabled on Trunkfood/Droidfood devices, and has soaked
for long enough to enable by default.
Bug: 379988507
Test: atest NetworkSecurityUnitTests
Change-Id: Ib0a9e3023ca46f5ce7a257af310789e1d25eb24d
Since we are moving away from runtime flags, the CT URLs for the log
list, signature, and public key will be hardcoded. I took the occasion
to simplify the logic for handling the Android CT properties and removed
the various "_PENDING" properties. They were making everything much
harder to follow.
Flag: com.android.net.ct.flags.certificate_transparency_job
Bug: 319829948
Test: NetworkSecurityUnitTests
Change-Id: I74bb946eccb5f376ee161ace2f151bf6ea1bdcff
The SignatureVerifier class allows setting a public key either as a
string or as a file. The former method is used when the key is read from
a flag via the CertificateTransparencyFlagsListener. The latter method
is used when the key is downloaded as a file by the daily
CertificateTransparencyJob.
This CL also adds an additional step to download a public key from a
URL via the CertificateTransparencyDownloader. Now the class goes
through the following steps:
1. Download a public key from the public key url,
2. If successful, download a log list signature from the metadata url,
3. If successful, download log list from the content url,
4. If successful, verifiy the log list using signature and public key,
5. If successufl, install the log list.
I also realized the CertificateTransparencyDownloaderTest was really
hard to understand, even for me that I wrote it xD
I attempted to clean up the test, hopefully it is a bit clearer now.
I'll probably make a second simplification pass in a follow-up CL.
Flag: com.android.net.ct.flags.certificate_transparency_job
Bug: 319829948
Test: NetworkSecurityUnitTests
Change-Id: I2be3e8b5895182d2afd8161aa44e54e1a6021685
Following a conversation with the Experiments team (b/374692404), it
appears we will not be able to use device config flags to trigger the
download of CT log lists.
This CL is the first of a series that will allow us to move away from
flags and instead rely on a daily job execution. For scheduling we rely
on the Android AlarmManager.
I previously attempted to schedule the daily job using the Android
JobScheduler. However, those attempts were unsuccessful beacause the
Tethering apex is not on the system_server classpath, so the system
would crash when attempting to load the class to execute the job.
Flag: com.android.net.ct.flags.certificate_transparency_job
Bug: 374692404
Test: NetworkSecurityUnitTests
Change-Id: I6ce44dcea464cab20d2df73b065e35c0f76dcbab
Directories treat the executable bit differently than files, and need it
to be set in order for the files within said directories to be
accessible. Without making the CT directories executable, the log list
file is not accessible. See
https://www.redhat.com/en/blog/linux-file-permissions-explained for more
details.
Test: atest NetworkSecurityUnitTests (also manually)
Bug: 319829948
Change-Id: I03c172e93dc3ecb50f69297ea47b2fdeb860048b
This CL adds a DownloadStatus class inside the DownloadHelper. The class
acts as a thin wrapper around the status and reason Ids returned by the
DownloadManager, with some utility methods to help with the
interpretation of the download status.
Bug: 319829948
Test: atest NetworkSecurityUnitTests
Change-Id: I111388ee37c09e30c02bb9bc9b3d65273961b91d
This reverts commit a618596be5.
Reason for revert: After discussing with tweek@, he pointed out that this may result in a slippery slope where the code may be tested in CTS instead of the device (https://screenshot.googleplex.com/BJZVK4FfXkWB2Rw).
Change-Id: Ic020cb98049c861947ac431c4b3761084e66073e
Bessie Jiangauthored and Gerrit Code Reviewcommited 2024-11-05 11:42:26 +00:00