ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

ሰላም፣ ሃብር! ዛሬ ሂደቶቜዎን ኚተንኮል ጥቃቶቜ እንዎት መጠበቅ እንደሚቜሉ ማውራት እፈልጋለሁ። macOSለምሳሌ፣ ይህ ለፀሹ-ቫይሚስ ወይም ለመጠባበቂያ ስርዓቶቜ ጠቃሚ ነው፣ በተለይም ኹዚህ በታቜ ባለው እውነታ ምክንያት። macOS አንድን ሂደት "ለመግደል" በርካታ መንገዶቜ አሉ። ለተጚማሪ መሹጃ እና ዚመኚላኚያ ዘዎዎቜ ኹዚህ በታቜ ያንብቡ።

ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

አንድን ሂደት "ለመግደል" ዚሚታወቀው መንገድ

አንድን ሂደት ለመግደል ዚሚታወቅ መንገድ ዹSIGKILL ምልክት ወደ እሱ መላክ ነው። በ bash ውስጥ፣ ለመግደል መደበኛውን "kill -SIGKILL PID" ወይም "pkill -9 NAME" ትዕዛዞቜን መጠቀም ይቜላሉ። "kill" ዹሚለው ትዕዛዝ ኚዩኒክስ ዘመን ጀምሮ ዹነበሹ ሲሆን በ ውስጥ ብቻ ሳይሆን በ ውስጥም ይገኛል። macOS, ነገር ግን በሌሎቜ ዩኒክስ-መሰል ስርዓቶቜ ላይም ጭምር።

ልክ እንደ ዩኒክስ-መሰል ሲስተሞቜ፣ macOS ኚሁለት በስተቀር ማንኛውንም ዚሂደት ምልክት እንዲጥሉ ያስቜልዎታል - SIGKILL እና SIGSTOP። ይህ ጜሑፍ በዋናነት ዚሂደት ግድያ በሚያስኚትል ዹSIGKILL ምልክት ላይ ያተኩራል።

ልዩነት macOS

В macOS በXNU ኹርነል ውስጥ ያለው ዚኪል ሲስተም ጥሪ ዹpsignal(SIGKILL,...) ተግባርን ይጠራል። በተጠቃሚ ቊታ ውስጥ ያሉ ሌሎቜ ዹተጠቃሚ እርምጃዎቜ ዹpsignal ተግባርን ሊጠሩት ዚሚቜሉትን ለማዚት እንሞክር። በውስጣዊ ዹኹርነል ሜካኒዝም ውስጥ ወደ psignal ተግባር ዹሚደሹጉ ጥሪዎቜን እናጣራለን (ምንም እንኳን ተራ ያልሆኑ ቢሆኑም፣ ለሌላ ጜሑፍ እንተወዋለን :)) - ዹፊርማ ማሚጋገጫ፣ ዹማህደሹ ትውስታ ስህተቶቜ፣ ዚመውጣት/ዹማቆም አያያዝ፣ ዹፋይል ደህንነት ጥሰቶቜ፣ ወዘተ።

አጠቃላይ እይታውን በተግባሩ እና በተዛማጅ ዚስርዓት ጥሪ እንጀምር በተኹፈለ_ጭነት_ያቋርጥኚጥንታዊው ዚግድያ ጥሪ በተጚማሪ ለኊፕሬቲንግ ሲስተም ዹተለዹ አማራጭ አቀራሚብ እንዳለ ግልፅ ነው። macOS እና በBSD ውስጥ አይገኝም። ዚሁለቱም ዚስርዓት ጥሪዎቜ ዚአሠራር መርሆዎቜም ተመሳሳይ ና቞ው። ወደ ኹርነል ተግባር psignal ቀጥተኛ ጥሪዎቜ ና቞ው። እንዲሁም አንድን ሂደት ኹመግደልዎ በፊት "ዚካንሲግናል" ፍተሻ እንደሚደሚግ ልብ ይበሉ - ሂደቱ ወደ ሌላ ሂደት ምልክት መላክ ይቜል እንደሆነ። ስርዓቱ ለምሳሌ ዚስርዓት ሂደቶቜን እንዲያጠፋ ማንኛውንም መተግበሪያ አይፈቅድም።

static int
terminate_with_payload_internal(struct proc *cur_proc, int target_pid, uint32_t reason_namespace,
				uint64_t reason_code, user_addr_t payload, uint32_t payload_size,
				user_addr_t reason_string, uint64_t reason_flags)
{
...
	target_proc = proc_find(target_pid);
...
	if (!cansignal(cur_proc, cur_cred, target_proc, SIGKILL)) {
		proc_rele(target_proc);
		return EPERM;
	}
...
	if (target_pid == cur_proc->p_pid) {
		/*
		 * psignal_thread_with_reason() will pend a SIGKILL on the specified thread or
		 * return if the thread and/or task are already terminating. Either way, the
		 * current thread won't return to userspace.
		 */
		psignal_thread_with_reason(target_proc, current_thread(), SIGKILL, signal_reason);
	} else {
		psignal_with_reason(target_proc, SIGKILL, signal_reason);
	}
...
}

ተጀመሹ

በስርዓት ጅምር ላይ አጋንንትን ለመፍጠር እና ዚህይወት ዘመናቾውን ለመቆጣጠር ዹተለመደው መንገድ ተጀምሯል። እባክዎን ዹምንጭ ኮዱ ለአሮጌ ዹ launchctl ስሪት መሆኑን ልብ ይበሉ፣ ኹዚህ በፊት macOS 10.10፣ ዚኮድ ምሳሌዎቜ ለምሳሌ ዓላማዎቜ ቀርበዋል። ዘመናዊው launchctl በXPC በኩል ወደ ማስጀመሪያ ምልክቶቜ ይልካል፣ እና launchctl ሎጂክ ወደ እሱ ተወስዷል።

አፕሊኬሜኖቜ እንዎት እንደሚቆሙ እንመልኚት። ዹ SIGTERM ምልክት ኚመላኩ በፊት፣ አፕሊኬሜኑ በ"proc_terminate" ዚስርዓት ጥሪ ለማቋሚጥ ይሞክራል።

<launchctl src/core.c>
...
	error = proc_terminate(j->p, &sig);
	if (error) {
		job_log(j, LOG_ERR | LOG_CONSOLE, "Could not terminate job: %d: %s", error, strerror(error));
		job_log(j, LOG_NOTICE | LOG_CONSOLE, "Using fallback option to terminate job...");
		error = kill2(j->p, SIGTERM);
		if (error) {
			job_log(j, LOG_ERR, "Could not signal job: %d: %s", error, strerror(error));
		} 
...
<>

በመኚለያ ስር፣ proc_terminate፣ ምንም እንኳን ስሙ ቢሆንም፣ በSIGTERM ብቻ ሳይሆን SIGKILLንም መላክ ይቜላል።

ቀጥተኛ ያልሆነ ግድያ - ዚንብሚት ካፕ

ዹበለጠ አስደሳቜ ጉዳይ በሌላ ዚስርዓት ጥሪ ውስጥ ሊታይ ይቜላል። ዚሂደት_ፖሊሲ. ለዚህ ዚሥርዓት ጥሪ ዹተለመደው ዚመተግበሪያ ሃብቶቜን መገደብ ነው፣ ለምሳሌ ሲፒዩ እና ዚማስታወሻ ኮታ መሹጃ ጠቋሚን መገደብ፣ ስርዓቱ በፋይል መሞጎጫ እንቅስቃሎዎቜ በኹፍተኛ ሁኔታ እንዳይቀንስ። ኹproc_apply_resource_actions ተግባር እንደሚታዚው አፕሊኬሜኑ ዚግብአት ገደቡ ላይ ኚደሚሰ፣ SIGKILL ምልክት ወደ ሂደቱ ይላካል።

ምንም እንኳን ይህ ዚስርዓት ጥሪ ሂደትን ዹመግደል አቅም ቢኖሚውም ሥርዓቱ ዚስርዓት ጥሪውን ዚመጥራት ሂደት መብቶቜን በበቂ ሁኔታ አላጣራም። በእውነቱ በማጣራት ላይ ነበሹነገር ግን ይህንን ሁኔታ ለማለፍ ዚአማራጭ ባንዲራ PROC_POLICY_ACTION_SET መጠቀም በቂ ነው።

ስለዚህ ዹCPU አጠቃቀምን ኮታ በመተግበሪያ “ኚገደቡ” (ለምሳሌ 1 ns ብቻ እንዲሰራ ኚፈቀዱ) በሲስተሙ ውስጥ ያለውን ማንኛውንም ሂደት መግደል ይቜላሉ። ስለዚህ ማልዌር ዹጾሹ-ቫይሚስ ሂደትን ጚምሮ በሲስተሙ ላይ ያለውን ማንኛውንም ሂደት ሊገድል ይቜላል። እንዲሁም ሂደቱን በ pid 1 (launchctl) ሲገድሉ ዹተገኘው ውጀት - ዹ SIGKILL ምልክትን ለማስኬድ በሚሞኚርበት ጊዜ ዹኹርነል ፍርሃት 🙂

ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

ቜግሩን እንዎት መፍታት ይቻላል?

ሂደትን መግደልን ለመኹላኹል በጣም ቀላሉ መንገድ በስርዓት ጥሪ ሠንጠሚዥ ውስጥ ያለውን ዚተግባር ጠቋሚ መተካት ነው። በሚያሳዝን ሁኔታ, ይህ ዘዮ ለብዙ ምክንያቶቜ ቀላል አይደለም.

በመጀመሪያ ፣ ዹማህደሹ ትውስታ ቊታን ዹሚይዘው ምልክት ዹ XNU kernel ዹግል ምልክት ብቻ ሳይሆን በኹርነል ምልክቶቜ ውስጥም ሊገኝ አይቜልም። ሂዩሪስቲክ ዹፍለጋ ዘዎዎቜን መጠቀም አለብህ፣ ለምሳሌ፣ ዚተግባርን ተለዋዋጭ መፍታት እና በውስጡ ጠቋሚን መፈለግ።

በሁለተኛ ደሹጃ, በሠንጠሚዡ ውስጥ ያሉት ዚመግቢያዎቜ መዋቅር ኹርነል በተጠናቀሚባ቞ው ባንዲራዎቜ ላይ ይወሰናል. ዹCONFIG_REQUIRES_U32_MUNGING ባንዲራ ኚታወጀ፣ ዚመዋቅሩ መጠን ይቀዚራል - ተጚማሪ መስክ ይታኚላል sy_arg_munge32. ኹርነል በዚትኛው ባንዲራ እንደተጠናቀሚ ተጚማሪ ማሚጋገጫ ማድሚግ አስፈላጊ ነው, እንደ አማራጭ, ኚሚታወቁት ጋር ዚተግባር አመልካ቟ቜን ያሚጋግጡ.

struct sysent {         /* system call table */
        sy_call_t       *sy_call;       /* implementing function */
#if CONFIG_REQUIRES_U32_MUNGING || (__arm__ && (__BIGGEST_ALIGNMENT__ > 4))
        sy_munge_t      *sy_arg_munge32; /* system call arguments munger for 32-bit process */
#endif
        int32_t         sy_return_type; /* system call return types */
        int16_t         sy_narg;        /* number of args */
        uint16_t        sy_arg_bytes;   /* Total size of arguments in bytes for
                                         * 32-bit system calls
                                         */
};

እንደ እድል ሆኖ፣ በዘመናዊ ስሪቶቜ macOS አፕል ኚሂደቶቜ ጋር ለመስራት አዲስ ኀፒአይ ያቀርባል። ዹEndpoint Security API ደንበኞቜ ለሌሎቜ ሂደቶቜ ብዙ ጥያቄዎቜን እንዲፈቅዱ ያስቜላ቞ዋል። ለምሳሌ፣ ወደ ሂደቶቜ ዚሚሄዱ ማናቾውም ምልክቶቜ፣ ዹSIGKILL ምልክትን ጚምሮ፣ ኹላይ ዹተጠቀሰውን ኀፒአይ በመጠቀም ሊታገዱ ይቜላሉ።

#include <bsm/libbsm.h>
#include <EndpointSecurity/EndpointSecurity.h>
#include <unistd.h>

int main(int argc, const char * argv[]) {
    es_client_t* cli = nullptr;
    {
        auto res = es_new_client(&cli, ^(es_client_t * client, const es_message_t * message) {
            switch (message->event_type) {
                case ES_EVENT_TYPE_AUTH_SIGNAL:
                {
                    auto& msg = message->event.signal;
                    auto target = msg.target;
                    auto& token = target->audit_token;
                    auto pid = audit_token_to_pid(token);
                    printf("signal '%d' sent to pid '%d'n", msg.sig, pid);
                    es_respond_auth_result(client, message, pid == getpid() ? ES_AUTH_RESULT_DENY : ES_AUTH_RESULT_ALLOW, false);
                }
                    break;
                default:
                    break;
            }
        });
    }

    {
        es_event_type_t evs[] = { ES_EVENT_TYPE_AUTH_SIGNAL };
        es_subscribe(cli, evs, sizeof(evs) / sizeof(*evs));
    }

    printf("%dn", getpid());
    sleep(60); // could be replaced with other waiting primitive

    es_unsubscribe_all(cli);
    es_delete_client(cli);

    return 0;
}

በተመሳሳይ፣ ዹ MAC ፖሊሲ በኹርነል ውስጥ ሊመዘገብ ይቜላል፣ ይህም ዚሲግናል ጥበቃ ዘዮን ይሰጣል (መመሪያ proc_check_signal) ግን ኀፒአይ በይፋ አይደገፍም።

ዹኹርነል ማራዘሚያ ጥበቃ

በስርዓቱ ውስጥ ሂደቶቜን ኹመጠበቅ በተጚማሪ ዹኹርነል ማራዘሚያ (ኬክስት) እራሱን መጠበቅ አስፈላጊ ነው። macOS IOKit ገንቢዎቜ ዹIOKit መሳሪያ ነጂዎቜን በቀላሉ እንዲያዘጋጁ ዚሚያስቜል ማዕቀፍ ያቀርባል። ኚመሳሪያዎቜ ጋር ለመስራት መሳሪያዎቜን ኚማቅሚብ በተጚማሪ IOKit ዹC++ ክፍል አብነቶቜን በመጠቀም ዚአሜኚርካሪዎቜ መደራሚብ ዘዎዎቜን ይደግፋል። ዹተጠቃሚ ቊታ መተግበሪያ ዹኹርነል-ተጠቃሚ ቊታ ግንኙነትን ለመመስሚት ዹተመዘገበ ዹክፍል ምሳሌን "ማግኘት" ይቜላል።

ዹioclasscount መገልገያ በአንድ ሥርዓት ውስጥ ያሉትን ዹክፍል አጋጣሚዎቜ ብዛት ለማወቅ አለ።

my_kext_ioservice = 1
my_kext_iouserclient = 1

በሹፌሩ ቁልል ለመመዝገብ ዹሚፈልግ ማንኛውም ዹኹርነል ቅጥያ ኚአይኊኀስ አገልግሎት ዚሚወርስ ክፍልን ማወጅ አለበት ለምሳሌ my_kext_ioservice በዚህ ጉዳይ ላይ ዹተጠቃሚ መተግበሪያዎቜን ማገናኘት ኹIOUserClient ዹተወሹሰ ክፍል አዲስ ለምሳሌ my_kext_iouserclient እንዲፈጠር ያደርጋል። .

ሟፌሩን ኚሲስተሙ ለማውሚድ ሲሞክሩ (ዹ kextunload ትዕዛዝ) ምናባዊ ተግባር "ቩል ማቋሚጥ (IOOptionBits አማራጮቜ)" ይባላል. kextunload ን ለማሰናኹል ለማውሚድ በሚሞኚርበት ጊዜ ዚማቋሚጡ ተግባር ጥሪ ላይ ሐሰት መመለስ በቂ ነው።

bool Kext::terminate(IOOptionBits options)
{

  if (!IsUnloadAllowed)
  {
    // Unload is not allowed, returning false
    return false;
  }

  return super::terminate(options);
}

ዹ IsUnloadAllowed ባንዲራ በ IOUserClient ሊዘጋጅ ይቜላል። ጭነቱ ሲገደብ ዹ kextunload ትዕዛዙ ዹሚኹተለውን ውጀት ይመልሳል፡-

admin@admins-Mac drivermanager % sudo kextunload ./test.kext
Password:
(kernel) Can't remove kext my.kext.test; services failed to terminate - 0xe00002c7.
Failed to unload my.kext.test - (iokit/common) unsupported function.

ለIOUserClient ተመሳሳይ ጥበቃ መደሹግ አለበት። ዹክፍል ምሳሌዎቜ IOKitLib ዹተጠቃሚ ቊታ ተግባርን በመጠቀም ማውሚድ ይቻላል "IOCatalogueTerminate(mach_port_t, uint32_t flag, io_name_t መግለጫ)"። ዹተጠቃሚ ቊታ አፕሊኬሜኑ "ይሞታል" ማለትም "clientDied" ተግባር እስካልተጠራ ድሚስ ወደ "ማቋሚጥ" ትእዛዝ በሚደሹግ ጥሪ ላይ ዚውሞት መመለስ ይቻላል::

ዹፋይል ጥበቃ

ፋይሎቜን ለመጠበቅ ዚፋይሎቜን መዳሚሻ ለመገደብ ዚሚያስቜልዎትን ዹ Kauth API መጠቀም በቂ ነው። አፕል በዚአካባቢው ስላሉ ዚተለያዩ ክስተቶቜ ማሳወቂያዎቜን ለገንቢዎቜ ያቀርባል፣ KAUTH_VNODE_DELETE፣ KAUTH_VNODE_WRITE_DATA እና KAUTH_VNODE_DELETE_CHILD ስራዎቜ ለእኛ አስፈላጊ ና቞ው። ዚፋይሎቜ መዳሚሻን ለመገደብ ቀላሉ መንገድ መንገድ ነው - ወደ ፋይሉ ዚሚወስደውን መንገድ ለማግኘት እና ዚመንገዱን ቅድመ ቅጥያ ለማነፃፀር ዹ"vn_getpath" API እንጠቀማለን። ዹአቃፊ ዱካዎቜን በፋይሎቜ መቀዹርን ለማመቻ቞ት ስርዓቱ ለእያንዳንዱ ፋይል መዳሚሻ አይሰጥም ነገር ግን ዹተሰዹመው አቃፊ ራሱ ብቻ መሆኑን ልብ ይበሉ። ዹወላጅ መንገድን ማወዳደር እና ለእሱ KAUTH_VNODE_DELETE መገደብ አስፈላጊ ነው።

ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

ዚቅድመ-ቅጥያዎቜ ብዛት ሲጚምር ዹዚህ አካሄድ ጉዳቱ ደካማ አፈፃፀም ሊሆን ይቜላል። ንጜጜሩ ኹኩ (ቅድመ ቅጥያ * ርዝመት) ጋር እኩል አለመሆኑን ለማሚጋገጥ ቅድመ ቅጥያ ዚቅድመ-ቅጥያዎቜ ብዛት፣ ርዝመቱ ዚሕብሚቁምፊው ርዝመት ኹሆነ ፣በቅድመ-ቅጥያዎቜ ላይ ዚተገነባ ቆራጥ ፊኒት አውቶሜትቶን (DFA) መጠቀም ይቜላሉ።

ለተወሰነ ቅድመ-ቅጥያዎቜ ዲኀፍኀ ዚመገንባት ዘዮን አስቡበት። በእያንዳንዱ ቅድመ ቅጥያ መጀመሪያ ላይ ጠቋሚዎቜን እናስጀምራለን. ሁሉም ጠቋሚዎቜ ወደ አንድ አይነት ባህሪ ዚሚያመለክቱ ኹሆነ እያንዳንዱን ጠቋሚ በአንድ ቁምፊ እንጚምራለን እና ዚአንድ መስመር ርዝመት አንድ በአንድ እንደሚበልጥ እናስታውሳለን. ሁለት ጠቋሚዎቜ ካሉ, ኚስር ያሉት ቁምፊዎቜ ዚተለያዩ ናቾው, ጠቋሚዎቹን በተጠቆሙት ባህሪ መሰሚት በቡድን እንኚፋፍለን እና ለእያንዳንዱ ቡድን አልጎሪዝምን እንደግማለን.

በመጀመሪያው ሁኔታ (ኚጠቋሚዎቹ ስር ያሉ ሁሉም ቁምፊዎቜ ተመሳሳይ ናቾው), ዚዲኀፍኀ ሁኔታን እናገኛለን, በተመሳሳይ መስመር ላይ አንድ ሜግግር ብቻ ነው ያለው. በሁለተኛው ጉዳይ ላይ 256 መጠን (ዚቁምፊዎቜ ብዛት እና ኹፍተኛው ዚቡድኖቜ ብዛት) ወደ ተኚታይ ግዛቶቜ ዹሚሾጋገሹውን ሠንጠሚዥ እናገኛለን ።

አንድ ምሳሌ እንመልኚት። ለቅድመ-ቅጥያዎቜ ስብስብ ("/foo/bar/tmp/"፣ "/var/db/foo/", "/foo/bar/aba/", "foo/bar/aac/")፣ ዹሚኹተለው ዲኀፍኀ ይቜላል ማግኘት. ስዕሉ ዚሚያሳዚው ወደ ሌሎቜ ግዛቶቜ ዹሚደሹጉ ሜግግሮቜን ብቻ ነው፣ ሌሎቜ ሜግግሮቜ ዚመጚሚሻ ሊሆኑ አይቜሉም።

ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

በዲኀፍኀ ግዛቶቜ ውስጥ በሚያልፉበት ጊዜ, 3 ጉዳዮቜ ሊኖሩ ይቜላሉ.

  1. ዚመጚሚሻው ሁኔታ ላይ ደርሷል - መንገዱ ዹተጠበቀ ነው፣ ክዋኔዎቹን ይገድቡ KAUTH_VNODE_DELETE፣ KAUTH_VNODE_WRITE_DATA እና KAUTH_VNODE_DELETE_CHILD
  2. ዚመጚሚሻው ሁኔታ አልደሹሰም ነገር ግን ዱካው "አልቋል" ( ባዶ ተርሚነተር ደርሷል) - መንገዱ ወላጅ ነው፣ KAUTH_VNODE_DELETE መገደብ አለበት። ማስታወሻው vnode አቃፊ ኹሆነ ወደ መጚሚሻው '/' ማኹል አለብህ አለበለዚያ ግን በፋይሉ "/foor/bar/t" ላይ ሊገድብ ይቜላል፣ ይህ ትክክል አይደለም።
  3. ዚመጚሚሻው ግዛት አልደሹሰም, መንገዱ አላለቀም. ዚትኛውም ቅድመ ቅጥያ ኹተሰጠው ጋር አይዛመድም፣ ገደቊቜን አናስተዋውቅም።

መደምደሚያ

ዚደህንነት መፍትሄዎቜን ዚማዘጋጀት ግብ ለተጠቃሚዎቜ እና ለመሚጃዎቻ቞ው ዚደህንነት ደሹጃን ማሳደግ ነው። ይህ ግብ ዚሚሳካው በኊፕሬቲንግ ሲስተሙ ውስጥ ያሉትን ተጋላጭነቶቜ ዚሚፈታውን ዚአክሮኒስ ሶፍትዌር በማልማት ነው። በሌላ በኩል፣ በተለይም እንደዚህ ያሉ ተጋላጭነቶቜን መዝጋት እንደ ምርት ዚራሳቜንን ዹመቋቋም አቅም ስለሚጚምር በOS በኩል ሊሻሻሉ ዚሚቜሉትን ዚደህንነት ገጜታዎቜ ማጠናኹር ቜላ ማለት ዚለብንም። ተጋላጭነቱ ለአፕል ምርት ደህንነት ቡድን ሪፖርት ተደርጓል እና በ macOS 10.14.5 (https://support.apple.com/en-gb/HT210119)።

ሂደቶቜን እና ዹኹርነል ቅጥያዎቜን እንዎት መጠበቅ እንደሚቻል በ ውስጥ macOS

ይህ ሁሉ ሊኹናወን ዚሚቜለው መገልገያዎ በኹርነል ውስጥ በይፋ ኚተጫነ ብቻ ነው። ይህ ማለት ለውጫዊ እና ለማይፈለጉ ሶፍትዌሮቜ እንደዚህ አይነት ክፍተቶቜ ዹሉም ማለት ነው። ሆኖም ግን፣ እንደምታዩት፣ እንደ ጾሹ-ቫይሚስ እና ዚመጠባበቂያ ስርዓቶቜ ያሉ ህጋዊ ፕሮግራሞቜን መጠበቅ እንኳን ዹተወሰነ ጥሚት ይጠይቃል። አሁን ግን፣ አዳዲስ ዚአክሮኒስ ምርቶቜ ለ macOS ኚስርዓቱ ላይ ኚማውሚድ ተጚማሪ ጥበቃ ይኖሚዋል።

ምንጭ: hab.com

በDDoS ጥበቃ፣ VPS VDS አገልጋዮቜ ለጣቢያዎቜ አስተማማኝ ማስተናገጃ ይግዙ 🔥 አስተማማኝ ዚድር ጣቢያ ማስተናገጃ በዲዶኀስ ጥበቃ፣ በቪፒኀስ ቪዲኀስ አገልጋዮቜ ይግዙ | ProHoster