/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "common_fuzzer.h" #include <system_ability_definition.h> #define protected public #define private public #include "enterprise_device_mgr_ability.h" #undef protected #undef private #ifdef OS_ACCOUNT_EDM_ENABLE #include "add_os_account_plugin.h" #endif #include "allowed_bluetooth_devices_plugin.h" #include "allowed_install_bundles_plugin.h" #include "allowed_usb_devices_plugin.h" #include "disable_bluetooth_plugin.h" #include "disable_hdc_plugin.h" #include "disable_microphone_plugin.h" #include "disable_printer_plugin.h" #include "disable_usb_plugin.h" #include "disabled_network_interface_plugin.h" #ifdef OS_ACCOUNT_EDM_ENABLE #include "disallow_add_local_account_plugin.h" #include "disallow_add_os_account_by_user_plugin.h" #endif #include "disallow_modify_datetime_plugin.h" #include "disallowed_install_bundles_plugin.h" #include "disallowed_running_bundles_plugin.h" #include "disallowed_uninstall_bundles_plugin.h" #include "domain_filter_rule_plugin.h" #include "fingerprint_auth_plugin.h" #include "firewall_rule_plugin.h" #include "func_code.h" #include "get_all_network_interfaces_plugin.h" #include "get_bluetooth_info_plugin.h" #include "get_device_encryption_status_plugin.h" #include "get_device_info_plugin.h" #include "get_display_version_plugin.h" #include "get_ip_address_plugin.h" #include "get_mac_plugin.h" #include "get_security_patch_tag_plugin.h" #include "global_proxy_plugin.h" #include "ienterprise_device_mgr.h" #include "install_plugin.h" #include "iptables_rule_plugin.h" #include "is_wifi_active_plugin.h" #include "location_policy_plugin.h" #include "lock_screen_plugin.h" #include "manage_auto_start_apps_plugin.h" #include "ntp_server_plugin.h" #include "operate_device_plugin.h" #include "password_policy_plugin.h" #include "power_policy_plugin.h" #include "reset_factory_plugin.h" #include "screen_off_time_plugin.h" #include "set_browser_policies_plugin.h" #include "set_wifi_disabled_plugin.h" #include "set_wifi_profile_plugin.h" #include "uninstall_plugin.h" #include "usb_read_only_plugin.h" #include "user_cert_plugin.h" #include "utils.h" namespace OHOS { namespace EDM { constexpr int32_t NUM_24 = 24; constexpr int32_t NUM_16 = 16; constexpr int32_t NUM_8 = 8; constexpr int32_t NUM_INDEX_ZERO = 0; constexpr int32_t NUM_INDEX_FIRST = 1; constexpr int32_t NUM_INDEX_SECOND = 2; constexpr int32_t NUM_INDEX_THIRD = 3; constexpr int32_t BYTE_SIZE = 8; constexpr int32_t MAX_STRING_SIZE = 1024; #ifdef OS_ACCOUNT_EDM_ENABLE const bool REGISTER_ADD_OS_ACCOUNT_PLUGIN = PluginManager::GetInstance()->AddPlugin(AddOsAccountPlugin::GetPlugin()); #endif const bool REGISTER_ALLOWED_BLUETOOTH_DEVICES_PLUGIN = PluginManager::GetInstance()->AddPlugin(AllowedBluetoothDevicesPlugin::GetPlugin()); const bool REGISTER_ALLOWED_INSTALL_BUNDLES_PLUGIN = PluginManager::GetInstance()->AddPlugin(AllowedInstallBundlesPlugin::GetPlugin()); const bool REGISTER_ALLOW_USB_DEVICES_PLUGIN = PluginManager::GetInstance()->AddPlugin(AllowUsbDevicesPlugin::GetPlugin()); const bool REGISTER_DISABLE_BLUETOOTH_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableBluetoothPlugin::GetPlugin()); const bool REGISTER_DISABLE_HDC_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableHdcPlugin::GetPlugin()); const bool REGISTER_DISABLE_MICROPHONE_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableMicrophonePlugin::GetPlugin()); const bool REGISTER_DISABLE_PRINTER_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisablePrinterPlugin::GetPlugin()); const bool REGISTER_DISABLE_USB_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableUsbPlugin::GetPlugin()); const bool REGISTER_DISABLED_NETWORK_INTERFACE_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisabledNetworkInterfacePlugin::GetPlugin()); #ifdef OS_ACCOUNT_EDM_ENABLE const bool REGISTER_DISALLOW_ADD_LOCAL_ACCOUNT_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallowAddLocalAccountPlugin::GetPlugin()); const bool REGISTER_DISALLOW_ADD_OS_ACCOUNT_BY_USER_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallowAddOsAccountByUserPlugin::GetPlugin()); #endif const bool REGISTER_DISALL_MODIFY_DATE_TIME_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallModifyDateTimePlugin::GetPlugin()); const bool REGISTER_DISALLOWED_INSTALL_BUNDLES_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallowedInstallBundlesPlugin::GetPlugin()); const bool REGISTER_DISALLOWED_RUNNING_BUNDLES_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallowedRunningBundlesPlugin::GetPlugin()); const bool REGISTER_DISALLOWED_UNINSTALL_BUNDLES_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisallowedUninstallBundlesPlugin::GetPlugin()); const bool REGISTER_DOMAIN_FILTER_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(DomainFilterRulePlugin::GetPlugin()); const bool REGISTER_FINGER_PRINT_AUTH_PLUGIN = PluginManager::GetInstance()->AddPlugin(FingerprintAuthPlugin::GetPlugin()); const bool REGISTER_FIREWALL_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(FirewallRulePlugin::GetPlugin()); const bool REGISTER_GET_ALL_NETWORK_INTERFACES_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetAllNetworkInterfacesPlugin::GetPlugin()); const bool REGISTER_GET_BLUETOOTH_INFO_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetBluetoothInfoPlugin::GetPlugin()); const bool REGISTER_GET_DEVICE_ENCRYPTION_STATUS_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDeviceEncryptionStatusPlugin::GetPlugin()); const bool REGISTER_GET_DEVICE_INFO_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDeviceInfoPlugin::GetPlugin()); const bool REGISTER_GET_DISPLAY_VERSION_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDisplayVersionPlugin::GetPlugin()); const bool REGISTER_GET_IP_ADDRESS_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetIpAddressPlugin::GetPlugin()); const bool REGISTER_GET_MAC_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetMacPlugin::GetPlugin()); const bool REGISTER_GET_SECURITY_PATCH_TAG_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetSecurityPatchTagPlugin::GetPlugin()); const bool REGISTER_GLOBAL_PROXY_PLUGIN = PluginManager::GetInstance()->AddPlugin(GlobalProxyPlugin::GetPlugin()); const bool REGISTER_INSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(InstallPlugin::GetPlugin()); const bool REGISTER_IPTABLES_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<IptablesRulePlugin>()); const bool REGISTER_IS_WIFI_ACTIVE_PLUGIN = PluginManager::GetInstance()->AddPlugin(IsWifiActivePlugin::GetPlugin()); const bool REGISTER_LOCATION_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(LocationPolicyPlugin::GetPlugin()); const bool REGISTER_LOCK_SCREEN_PLUGIN = PluginManager::GetInstance()->AddPlugin(LockScreenPlugin::GetPlugin()); const bool REGISTER_MANAGE_AUTO_START_APPS_PLUGIN = PluginManager::GetInstance()->AddPlugin(ManageAutoStartAppsPlugin::GetPlugin()); const bool REGISTER_NTP_SERVER_PLUGIN = PluginManager::GetInstance()->AddPlugin(NTPServerPlugin::GetPlugin()); const bool REGISTER_OPERATE_DEVICE_PLUGIN = PluginManager::GetInstance()->AddPlugin(OperateDevicePlugin::GetPlugin()); const bool REGISTER_PASSWORD_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(PasswordPolicyPlugin::GetPlugin()); const bool REGISTER_POWER_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<PowerPolicyPlugin>()); const bool REGISTER_RESET_FACTORY_PLUGIN = PluginManager::GetInstance()->AddPlugin(ResetFactoryPlugin::GetPlugin()); const bool REGISTER_SCREEN_OFF_TIME_PLUGIN = PluginManager::GetInstance()->AddPlugin(ScreenOffTimePlugin::GetPlugin()); const bool REGISTER_SET_BROWSER_POLICIES_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<SetBrowserPoliciesPlugin>()); const bool REGISTER_SET_WIFI_DISABLED_PLUGIN = PluginManager::GetInstance()->AddPlugin(SetWifiDisabledPlugin::GetPlugin()); const bool REGISTER_SET_WIFI_PROFILE_PLUGIN = PluginManager::GetInstance()->AddPlugin(SetWifiProfilePlugin::GetPlugin()); const bool REGISTER_UNINSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(UninstallPlugin::GetPlugin()); const bool REGISTER_USB_READ_ONLY_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<UsbReadOnlyPlugin>()); const bool REGISTER_USER_CERT_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<UserCertPlugin>()); void CommonFuzzer::OnRemoteRequestFuzzerTest(uint32_t code, const uint8_t* data, size_t size, MessageParcel& parcel) { TEST::Utils::SetEdmInitialEnv(); sptr<EnterpriseDeviceMgrAbility> enterpriseDeviceMgrAbility = EnterpriseDeviceMgrAbility::GetInstance(); enterpriseDeviceMgrAbility->OnStart(); MessageParcel reply; MessageOption option; enterpriseDeviceMgrAbility->OnRemoteRequest(code, parcel, reply, option); TEST::Utils::ResetTokenTypeAndUid(); } void CommonFuzzer::SetParcelContent(MessageParcel& parcel, const uint8_t* data, size_t size) { AppExecFwk::ElementName admin; admin.SetBundleName("com.example.edmtest"); admin.SetAbilityName("com.example.edmtest.EnterpriseAdminAbility"); parcel.WriteInterfaceToken(IEnterpriseDeviceMgr::GetDescriptor()); parcel.WriteParcelable(&admin); parcel.WriteBuffer(data, size); } uint32_t CommonFuzzer::GetU32Data(const uint8_t* ptr) { return (ptr[NUM_INDEX_ZERO] << NUM_24) | (ptr[NUM_INDEX_FIRST] << NUM_16) | (ptr[NUM_INDEX_SECOND] << NUM_8) | ptr[NUM_INDEX_THIRD]; } int32_t CommonFuzzer::GetU32Data(const uint8_t* ptr, int32_t& pos, size_t size) { if (size <= pos || size - pos < sizeof(int32_t)) { return 0; } int32_t ret = 0; pos += sizeof(int32_t); for (int i = 0; i < sizeof(int32_t); i++) { ret |= ((int32_t)ptr[i] << (BYTE_SIZE * i)); } return ret; } long CommonFuzzer::GetLong(const uint8_t* ptr, int32_t& pos, size_t size) { if (size <= pos || size - pos < sizeof(long)) { return 0; } long ret = 0; pos += sizeof(long); for (int i = 0; i < sizeof(long); i++) { ret |= ((long)ptr[i] << (BYTE_SIZE * i)); } return ret; } std::string CommonFuzzer::GetString(const uint8_t* ptr, int32_t& pos, int32_t stringSize, size_t size) { if (size <= pos || size - pos < stringSize) { return nullptr; } stringSize = (stringSize > MAX_STRING_SIZE) ? MAX_STRING_SIZE : stringSize; std::string ret(reinterpret_cast<const char*>(ptr + pos), stringSize); pos += stringSize; return ret; } } // namespace EDM } // namespace OHOS