Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: chrome/browser/safe_browsing/download_protection_service.cc

Issue 2934373002: Record Code Signature of Downloaded DMG files (Closed)
Patch Set: addressing comment Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 DownloadProtectionService* service, 342 DownloadProtectionService* service,
343 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, 343 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
344 BinaryFeatureExtractor* binary_feature_extractor) 344 BinaryFeatureExtractor* binary_feature_extractor)
345 : item_(item), 345 : item_(item),
346 url_chain_(item->GetUrlChain()), 346 url_chain_(item->GetUrlChain()),
347 referrer_url_(item->GetReferrerUrl()), 347 referrer_url_(item->GetReferrerUrl()),
348 tab_url_(item->GetTabUrl()), 348 tab_url_(item->GetTabUrl()),
349 tab_referrer_url_(item->GetTabReferrerUrl()), 349 tab_referrer_url_(item->GetTabReferrerUrl()),
350 archived_executable_(false), 350 archived_executable_(false),
351 archive_is_valid_(ArchiveValid::UNSET), 351 archive_is_valid_(ArchiveValid::UNSET),
352 #if defined(OS_MACOSX)
353 disk_image_signature_(nullptr),
354 #endif
352 callback_(callback), 355 callback_(callback),
353 service_(service), 356 service_(service),
354 binary_feature_extractor_(binary_feature_extractor), 357 binary_feature_extractor_(binary_feature_extractor),
355 database_manager_(database_manager), 358 database_manager_(database_manager),
356 pingback_enabled_(service_->enabled()), 359 pingback_enabled_(service_->enabled()),
357 finished_(false), 360 finished_(false),
358 type_(ClientDownloadRequest::WIN_EXECUTABLE), 361 type_(ClientDownloadRequest::WIN_EXECUTABLE),
359 start_time_(base::TimeTicks::Now()), 362 start_time_(base::TimeTicks::Now()),
360 skipped_url_whitelist_(false), 363 skipped_url_whitelist_(false),
361 skipped_certificate_whitelist_(false), 364 skipped_certificate_whitelist_(false),
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 else 809 else
807 StartExtractFileFeatures(); 810 StartExtractFileFeatures();
808 } 811 }
809 812
810 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { 813 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) {
811 DCHECK_CURRENTLY_ON(BrowserThread::UI); 814 DCHECK_CURRENTLY_ON(BrowserThread::UI);
812 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); 815 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_);
813 if (!service_) 816 if (!service_)
814 return; 817 return;
815 818
819 if (results.signature_blob.size() > 0) {
820 disk_image_signature_ =
821 base::MakeUnique<std::vector<uint8_t>>(results.signature_blob);
822 }
823
816 // Even if !results.success, some of the DMG may have been parsed. 824 // Even if !results.success, some of the DMG may have been parsed.
817 archive_is_valid_ = 825 archive_is_valid_ =
818 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); 826 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID);
819 archived_executable_ = results.has_executable; 827 archived_executable_ = results.has_executable;
820 archived_binary_.CopyFrom(results.archived_binary); 828 archived_binary_.CopyFrom(results.archived_binary);
821 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() 829 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value()
822 << ", has_executable=" << results.has_executable 830 << ", has_executable=" << results.has_executable
823 << ", success=" << results.success; 831 << ", success=" << results.success;
824 832
825 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( 833 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile(
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 item_->GetUserData(kDownloadReferrerChainDataKey)); 1059 item_->GetUserData(kDownloadReferrerChainDataKey));
1052 if (referrer_chain_data && 1060 if (referrer_chain_data &&
1053 !referrer_chain_data->GetReferrerChain()->empty()) { 1061 !referrer_chain_data->GetReferrerChain()->empty()) {
1054 request.mutable_referrer_chain()->Swap( 1062 request.mutable_referrer_chain()->Swap(
1055 referrer_chain_data->GetReferrerChain()); 1063 referrer_chain_data->GetReferrerChain());
1056 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) 1064 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE)
1057 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( 1065 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain(
1058 request.mutable_referrer_chain()); 1066 request.mutable_referrer_chain());
1059 } 1067 }
1060 1068
1069 #if defined(OS_MACOSX)
1070 UMA_HISTOGRAM_BOOLEAN(
1071 "SBClientDownload."
1072 "DownloadFileHasDmgSignature",
1073 disk_image_signature_ != nullptr);
1074
1075 if (disk_image_signature_) {
1076 request.set_udif_code_signature(disk_image_signature_->data(),
1077 disk_image_signature_->size());
1078 }
1079 #endif
1080
1061 if (archive_is_valid_ != ArchiveValid::UNSET) 1081 if (archive_is_valid_ != ArchiveValid::UNSET)
1062 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1082 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1063 request.mutable_signature()->CopyFrom(signature_info_); 1083 request.mutable_signature()->CopyFrom(signature_info_);
1064 if (image_headers_) 1084 if (image_headers_)
1065 request.set_allocated_image_headers(image_headers_.release()); 1085 request.set_allocated_image_headers(image_headers_.release());
1066 if (archived_executable_) 1086 if (archived_executable_)
1067 request.mutable_archived_binary()->Swap(&archived_binary_); 1087 request.mutable_archived_binary()->Swap(&archived_binary_);
1068 if (!request.SerializeToString(&client_download_request_data_)) { 1088 if (!request.SerializeToString(&client_download_request_data_)) {
1069 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); 1089 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO);
1070 return; 1090 return;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 GURL referrer_url_; 1266 GURL referrer_url_;
1247 // URL chain of redirects leading to (but not including) |tab_url|. 1267 // URL chain of redirects leading to (but not including) |tab_url|.
1248 std::vector<GURL> tab_redirects_; 1268 std::vector<GURL> tab_redirects_;
1249 // URL and referrer of the window the download was started from. 1269 // URL and referrer of the window the download was started from.
1250 GURL tab_url_; 1270 GURL tab_url_;
1251 GURL tab_referrer_url_; 1271 GURL tab_referrer_url_;
1252 1272
1253 bool archived_executable_; 1273 bool archived_executable_;
1254 ArchiveValid archive_is_valid_; 1274 ArchiveValid archive_is_valid_;
1255 1275
1276 #if defined(OS_MACOSX)
1277 std::unique_ptr<std::vector<uint8_t>> disk_image_signature_;
1278 #endif
1279
1256 ClientDownloadRequest_SignatureInfo signature_info_; 1280 ClientDownloadRequest_SignatureInfo signature_info_;
1257 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; 1281 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_;
1258 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> 1282 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary>
1259 archived_binary_; 1283 archived_binary_;
1260 CheckDownloadCallback callback_; 1284 CheckDownloadCallback callback_;
1261 // Will be NULL if the request has been canceled. 1285 // Will be NULL if the request has been canceled.
1262 DownloadProtectionService* service_; 1286 DownloadProtectionService* service_;
1263 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; 1287 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_;
1264 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 1288 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
1265 const bool pingback_enabled_; 1289 const bool pingback_enabled_;
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 out_request->mutable_referrer_chain()); 2039 out_request->mutable_referrer_chain());
2016 UMA_HISTOGRAM_COUNTS_100( 2040 UMA_HISTOGRAM_COUNTS_100(
2017 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2041 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
2018 out_request->referrer_chain_size()); 2042 out_request->referrer_chain_size());
2019 UMA_HISTOGRAM_ENUMERATION( 2043 UMA_HISTOGRAM_ENUMERATION(
2020 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2044 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
2021 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2045 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
2022 } 2046 }
2023 2047
2024 } // namespace safe_browsing 2048 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698