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

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

Issue 2934373002: Record Code Signature of Downloaded DMG files (Closed)
Patch Set: simplifying data structures in download_protection_service.cc 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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 DownloadProtectionService* service, 341 DownloadProtectionService* service,
342 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, 342 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
343 BinaryFeatureExtractor* binary_feature_extractor) 343 BinaryFeatureExtractor* binary_feature_extractor)
344 : item_(item), 344 : item_(item),
345 url_chain_(item->GetUrlChain()), 345 url_chain_(item->GetUrlChain()),
346 referrer_url_(item->GetReferrerUrl()), 346 referrer_url_(item->GetReferrerUrl()),
347 tab_url_(item->GetTabUrl()), 347 tab_url_(item->GetTabUrl()),
348 tab_referrer_url_(item->GetTabReferrerUrl()), 348 tab_referrer_url_(item->GetTabReferrerUrl()),
349 archived_executable_(false), 349 archived_executable_(false),
350 archive_is_valid_(ArchiveValid::UNSET), 350 archive_is_valid_(ArchiveValid::UNSET),
351 #if defined(OS_MACOSX)
352 disk_image_signature_(nullptr),
353 #endif
351 callback_(callback), 354 callback_(callback),
352 service_(service), 355 service_(service),
353 binary_feature_extractor_(binary_feature_extractor), 356 binary_feature_extractor_(binary_feature_extractor),
354 database_manager_(database_manager), 357 database_manager_(database_manager),
355 pingback_enabled_(service_->enabled()), 358 pingback_enabled_(service_->enabled()),
356 finished_(false), 359 finished_(false),
357 type_(ClientDownloadRequest::WIN_EXECUTABLE), 360 type_(ClientDownloadRequest::WIN_EXECUTABLE),
358 start_time_(base::TimeTicks::Now()), 361 start_time_(base::TimeTicks::Now()),
359 skipped_url_whitelist_(false), 362 skipped_url_whitelist_(false),
360 skipped_certificate_whitelist_(false), 363 skipped_certificate_whitelist_(false),
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 else 808 else
806 StartExtractFileFeatures(); 809 StartExtractFileFeatures();
807 } 810 }
808 811
809 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { 812 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) {
810 DCHECK_CURRENTLY_ON(BrowserThread::UI); 813 DCHECK_CURRENTLY_ON(BrowserThread::UI);
811 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); 814 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_);
812 if (!service_) 815 if (!service_)
813 return; 816 return;
814 817
818 #if defined(OS_MACOSX)
Jialiu Lin 2017/06/28 00:23:34 You probably don't need the #if/#endif here, since
mortonm 2017/06/28 16:24:41 Done.
819 if (results.signature_blob.size() > 0) {
820 disk_image_signature_ = std::unique_ptr<std::vector<uint8_t>>(
Jialiu Lin 2017/06/28 00:23:34 change "std::unique_ptr<std::vector<uint8_t>>(new
mortonm 2017/06/28 16:24:41 Done.
821 new std::vector<uint8_t>(results.signature_blob));
822 }
823 #endif
824
815 // Even if !results.success, some of the DMG may have been parsed. 825 // Even if !results.success, some of the DMG may have been parsed.
816 archive_is_valid_ = 826 archive_is_valid_ =
817 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); 827 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID);
818 archived_executable_ = results.has_executable; 828 archived_executable_ = results.has_executable;
819 archived_binary_.CopyFrom(results.archived_binary); 829 archived_binary_.CopyFrom(results.archived_binary);
820 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() 830 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value()
821 << ", has_executable=" << results.has_executable 831 << ", has_executable=" << results.has_executable
822 << ", success=" << results.success; 832 << ", success=" << results.success;
823 833
824 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( 834 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile(
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 item_->GetUserData(kDownloadReferrerChainDataKey)); 1060 item_->GetUserData(kDownloadReferrerChainDataKey));
1051 if (referrer_chain_data && 1061 if (referrer_chain_data &&
1052 !referrer_chain_data->GetReferrerChain()->empty()) { 1062 !referrer_chain_data->GetReferrerChain()->empty()) {
1053 request.mutable_referrer_chain()->Swap( 1063 request.mutable_referrer_chain()->Swap(
1054 referrer_chain_data->GetReferrerChain()); 1064 referrer_chain_data->GetReferrerChain());
1055 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) 1065 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE)
1056 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( 1066 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain(
1057 request.mutable_referrer_chain()); 1067 request.mutable_referrer_chain());
1058 } 1068 }
1059 1069
1070 #if defined(OS_MACOSX)
1071 UMA_HISTOGRAM_BOOLEAN(
1072 "SBClientDownload."
1073 "DownloadFileHasDmgSignature",
1074 disk_image_signature_ != nullptr);
1075
1076 if (disk_image_signature_) {
1077 request.set_udif_code_signature(disk_image_signature_->data(),
1078 disk_image_signature_->size());
1079 }
1080 #endif
1081
1060 if (archive_is_valid_ != ArchiveValid::UNSET) 1082 if (archive_is_valid_ != ArchiveValid::UNSET)
1061 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1083 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1062 request.mutable_signature()->CopyFrom(signature_info_); 1084 request.mutable_signature()->CopyFrom(signature_info_);
1063 if (image_headers_) 1085 if (image_headers_)
1064 request.set_allocated_image_headers(image_headers_.release()); 1086 request.set_allocated_image_headers(image_headers_.release());
1065 if (archived_executable_) 1087 if (archived_executable_)
1066 request.mutable_archived_binary()->Swap(&archived_binary_); 1088 request.mutable_archived_binary()->Swap(&archived_binary_);
1067 if (!request.SerializeToString(&client_download_request_data_)) { 1089 if (!request.SerializeToString(&client_download_request_data_)) {
1068 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); 1090 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO);
1069 return; 1091 return;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 GURL referrer_url_; 1267 GURL referrer_url_;
1246 // URL chain of redirects leading to (but not including) |tab_url|. 1268 // URL chain of redirects leading to (but not including) |tab_url|.
1247 std::vector<GURL> tab_redirects_; 1269 std::vector<GURL> tab_redirects_;
1248 // URL and referrer of the window the download was started from. 1270 // URL and referrer of the window the download was started from.
1249 GURL tab_url_; 1271 GURL tab_url_;
1250 GURL tab_referrer_url_; 1272 GURL tab_referrer_url_;
1251 1273
1252 bool archived_executable_; 1274 bool archived_executable_;
1253 ArchiveValid archive_is_valid_; 1275 ArchiveValid archive_is_valid_;
1254 1276
1277 #if defined(OS_MACOSX)
1278 std::unique_ptr<std::vector<uint8_t>> disk_image_signature_;
1279 #endif
1280
1255 ClientDownloadRequest_SignatureInfo signature_info_; 1281 ClientDownloadRequest_SignatureInfo signature_info_;
1256 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; 1282 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_;
1257 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> 1283 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary>
1258 archived_binary_; 1284 archived_binary_;
1259 CheckDownloadCallback callback_; 1285 CheckDownloadCallback callback_;
1260 // Will be NULL if the request has been canceled. 1286 // Will be NULL if the request has been canceled.
1261 DownloadProtectionService* service_; 1287 DownloadProtectionService* service_;
1262 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; 1288 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_;
1263 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 1289 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
1264 const bool pingback_enabled_; 1290 const bool pingback_enabled_;
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
2012 out_request->mutable_referrer_chain()); 2038 out_request->mutable_referrer_chain());
2013 UMA_HISTOGRAM_COUNTS_100( 2039 UMA_HISTOGRAM_COUNTS_100(
2014 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2040 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
2015 out_request->referrer_chain_size()); 2041 out_request->referrer_chain_size());
2016 UMA_HISTOGRAM_ENUMERATION( 2042 UMA_HISTOGRAM_ENUMERATION(
2017 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2043 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
2018 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2044 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
2019 } 2045 }
2020 2046
2021 } // namespace safe_browsing 2047 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698