Book "BPF pro Linux Cras"

Book "BPF pro Linux Cras"Salve, Khabro habitant! Machina virtualis BPF est una e maximis partibus nuclei Linux. Proprius usus systema fabrum patietur ut vitia reprehendat et etiam implicatissimas difficultates solvet. Disces quomodo scribere programmata monitorem et mores nuclei mitigare, quomodo codicem ad effectum monitoris in nucleo tuto efficiendi, et multo magis. David Calavera et Laurentius Fontana potestatem BPF adiuvabunt. Expande scientiam perficiendi ipsum, networking, securitatem. - Utere BPF ad monitorem ac modificandi mores nuclei Linux. - Injicere codicem ut caute monitorem nuclei eventus habeat, quin nucleum vel reboot systema rependat. — Exempla convenient in codice C, Go vel Python. - Imperare habendo BPF programmatis lifecycli.

Linux Kernel Securitatis, Eius Features et Seccomp

BPF potenter praebet viam ad nucleum extendendi sine immolatione stabilitatis, securitatis, vel velocitatis. Quam ob rem, tincidunt nuclei nuclei utilem fore censebant uti sua mobilitate ad emendandum processum solitarium in Seccomp, fovendo Filtra Seccomp a programmatis BPF suffulta, etiam quae Seccomp BPF notum est. In hoc capite quid sit Seccomp, et quomodo usus sit, dicetur. Tunc disces quomodo scribendas Filtra Seccomp programmata BPF utentes. Post hoc, in BPF hamis constructis inspiciemus quae in nucleo pro modulorum securitatis Linux comprehenduntur.

Linux Securitatis Modulae (LSM) compages sunt, quae certae functionum praebet, quae variae securitatis exempla modo normato modo ad effectum adduci possunt. LSM directe in arbore nuclei fonte adhiberi possunt, ut Apparmor, SELinux et Tomoyo.

Incipiamus disputando de facultatibus Linux.

occasiones

Essentia facultatum Linux est ut licentiam concedere debeas processu non priuilegiato ad aliquod opus faciendum, sed sine suid ad hoc adhibito, vel aliter processum privilegiatum fac, minuendo possibilitatem oppugnandi et processum ad certa officia exercenda permittens. Exempli gratia, si applicatio tua ad portum privilegiatum aperiendum indiget, 80 dic, pro radice processus currendi, facultatem simpliciter dare potes.

Considera programmatum Go nomine main.go:

package main
import (
            "net/http"
            "log"
)
func main() {
     log.Fatalf("%v", http.ListenAndServe(":80", nil))
}

Haec progressio servo HTTP in portu 80 inservit (hoc est portus privilegiatus). Plerumque statim post compilationem curritur:

$ go build -o capabilities main.go
$ ./capabilities

Sed quia privilegia radicem non concedimus, hic codicem errorem in portum ligans mittet;

2019/04/25 23:17:06 listen tcp :80: bind: permission denied
exit status 1

capsh (testa procurator) instrumentum est, quod concha cum certae facultatis statuto decurrit.

In hoc casu, ut iam dictum est, pro pleno iure radicis donandi, portum privilegiatum dare potes obligandi facultatem praebendo cap_netis serviendi facultatem cum omnibus aliis iam in programmatis. Ad hoc faciendum, programmata nostra in capsh includere possumus;

# capsh --caps='cap_net_bind_service+eip cap_setpcap,cap_setuid,cap_setgid+ep' 
   --keep=1 --user="nobody" 
   --addamb=cap_net_bind_service -- -c "./capabilities"

Intellegimus hanc turmam paulum.

  • capsh - uti capsh in concha.
  • -caps='cap_net_bind_service+eip cap_setpcap, cap_setuid, cap_setgid+ep' - cum necesse est utentem mutare (nolumus radicem currere), denotabimus cap_net_bind_services et facultatem utentis ID ex actu mutandi radix nulli, scilicet cap_setuid et cap_setgid.
  • -keep=1 - aptas facultates servare volumus cum mutandi ex ratione radicis.
  • -usor = “nullus” — finis user cursus programmatis nullus erit.
  • —addamb=cap_net_bind_service — aperiendae facultatum cognatarum post mutandi modum radicis.
  • - -c "./capabilities" - modo currunt progressio.

Facultates connexae sunt speciales quaedam facultates quae a programmatibus infantum hereditantur cum programmata currens eas exercet utendo executo(). Facultates tantum quae consociatae sunt, vel aliis verbis, ut ambitus facultatum, hereditari possunt.

Probabiliter miratus es quid sit +eip, specificans facultatem in optione -capsorum. Haec eoo adhibenda sunt, ut facultas;

-mus reducitur (p);

-available for usus (e);

—can hereditari pueri fiunt (i).

Cum servitio uti volumus, hoc cum e vexillo facere oportet. Tunc incipiemus testam in precepto. Hoc facultatem binarii curram et cum vexillo i notare necesse est. Denique volumus pluma ut possimus (hoc fecimus sine UID mutato) cum p. Is vultus amo cap_net_bind_service+eip.

Proventus utens ss inhibere potes. Compendiamus output frenum aptandum in pagina, sed ostendet portum adiunctum et id usorem praeter 0, hoc in casu 65;

# ss -tulpn -e -H | cut -d' ' -f17-
128 *:80 *:*
users:(("capabilities",pid=30040,fd=3)) uid:65534 ino:11311579 sk:2c v6only:0

In hoc exemplo capsh usi sumus, sed testam libcap uti potes. Plura vide Virum 3 libcap.

Cum programmata scribens, saepe elaborata enucleata ante omnia non novit, quae programma curriculo temporis indiget; Haec autem lineamenta in novis versionibus mutare possunt.

Ut melius intelligamus facultates nostrae programmatis, possumus instrumentum BCC capacem accipere, quod kprobe ponit ad munus nuclei capabile:

/usr/share/bcc/tools/capable
TIME      UID  PID   TID   COMM               CAP    NAME           AUDIT
10:12:53 0 424     424     systemd-udevd 12 CAP_NET_ADMIN         1
10:12:57 0 1103   1101   timesync        25 CAP_SYS_TIME         1
10:12:57 0 19545 19545 capabilities       10 CAP_NET_BIND_SERVICE 1

Idem consequi possumus utendo bpftrace cum uno-kprobe in cap_capable nucleo functionis;

bpftrace -e 
   'kprobe:cap_capable {
      time("%H:%M:%S ");
      printf("%-6d %-6d %-16s %-4d %dn", uid, pid, comm, arg2, arg3);
    }' 
    | grep -i capabilities

Hoc aliquid quasi sequentium outputabit, si facultates nostrae programmatis post kprobe valeant:

12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 21 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 12 0
12:01:56 1000 13524 capabilities 10 1

Quinta columna est facultates quas eget processus, et cum haec output includit eventus non-auditorum, videmus omnes non-auditorum compescere, ac tandem debitam facultatem cum vexillo audito (ultimo in output) positam ad 1. Facultatem. unum, cuius interest, est CAP_NET_BIND_SERVICE, definitur ut constans in nucleo source code in tabella includens/uapi/linux/ability.h cum identificante 10:

/* Allows binding to TCP/UDP sockets below 1024 */
/* Allows binding to ATM VCIs below 32 */
#define CAP_NET_BIND_SERVICE 10<source lang="go">

Facultates saepe in runtime pro vasis ut runC vel Docker permittunt ut sine privilegio currant, sed tantum facultates necessariae sunt ut ad plures applicationes currendum sint. Cum applicatio quasdam facultates requirit, Docker eis praebere potest utentes cap-add:

docker run -it --rm --cap-add=NET_ADMIN ubuntu ip link add dummy0 type dummy

Hoc mandatum continens facultatem CAP_NET_ADMIN dabit, sino id nexum retis configurare dummy0 interfaciei addere.

Proxima sectio ostendit quomodo lineamentis eliquandis utatur, sed alia utens arte quae sinit nos ut proprios columellas programmatice efficiant.

Seccomp

Seccomp stat pro Secure Computing et est iacuit securitatis in Linux nucleo impletum quod tincidunt ad eliquare systema certa vocat. Quamvis Seccomp in facultates cum Linux comparabilis sit, eius facultas quaedam systematis administrandi vocat, multo magis flexibilior illis comparatus.

Seccomp et Linux notae non sunt inter se exclusivae et saepe simul utuntur ad utrumque accessum utilia. Exempli gratia, processum CAP_NET_ADMIN facultatem dare velis, sed nervum nexus accipiendi non permittit, rationi vocationum interclusio acceptanda et acceptanda.

Modus eliquandi Seccomp fundatur in Filtra BPF operandi in modo SECCOMP_MODE_FILTER, et ratio vocationis eliquandi eodem modo ac in fasciculis conficitur.

Filtra seccomp onerata sunt usu pretl per operationem PR_SET_SECCOMP. Hae columellae formam programmatis BPF accipiunt, quae pro singulis fasciculi seccomp instrumenti seccomp_data structura repraesentata est. Haec compages continet relationem architecturae, regulam processus instructionum tempore systematis vocati, et maximum sex rationes vocant argumenta, quae uint64 exprimuntur.

Hoc est quod structurae seccomp_datae speciem praebet e nucleo fonte codicis in fasciculo linux/seccomp.h:

struct seccomp_data {
int nr;
      __u32 arch;
      __u64 instruction_pointer;
      __u64 args[6];
};

Ut ex hac structura videre potes, ratio vocationis, argumentorum, vel complexionis utriusque percolatur.

Acceptis singulis fasciculis Seccomp, colum processus praestare debet ad decisionem finalem faciendam et nucleum indicandum quid faciendum sit. Sententia finalis exprimitur ab uno ex valoribus redituum (statum codes).

- SECCOMP_RET_KILL_PROCESS - Totum processum statim post eliquationem vocati systematis quod propter hoc non exsecutum est necat.

- SECCOMP_RET_KILL_THREAD - stamina currente terminat statim postquam systema eliquare quod ob id non exsecutum est.

— SECCOMP_RET_KILL — alias pro SECCOMP_RET_KILL_THREAD, retrorsum convenientiae.

- SECCOMP_RET_TRAP - ratio vocationis prohibetur et SIGSYS (Ratio Bad System Call) signum mittitur ad negotium quod vocat.

- SECCOMP_RET_ERRNO - Systema vocatio exsecutum non est, et pars SECCOMP_RET_DATA filter reditus pretii ad spatium usoris cum errno valore transmittitur. Causa erroris fretus, diversa errno bona redduntur. Numeri erroris elenchus in sequenti articulo praebetur.

- SECCOMP_RET_TRACE - Solebant notificare typhum tramatoris utendi - PTRACE_O_TRACESECCOMP ad intercipiendum quando ratio vocationis exsecuta est ad videndum ac moderandum processum. Si vestigium non coniungitur, error redditur, errno -ENOSYS ponitur, et ratio vocationis non afficitur.

- SECCOMP_RET_LOG - Vocatio systematis resolvitur et initium est.

- SECCOMP_RET_ALLOW - ratio vocationis simpliciter conceditur.

Ptrace est ratio vocationis ad mechanismos deducendi in processu appellato tracee, cum facultate monitoris et moderandi processum executionem. Programma vestigium efficaciter imprimere potest exsecutioni mandare et debilitare vestigium memoriae registri. In contextu Seccomp, ptrace adhibetur cum ab SECCOMP_RET_TRACE status code utitur, ideo trames impedire potest quin ratio vocationis suam logicam exsequatur et efficiat.

Seccomp errores

A tempore usque ad tempus, cum Seccomp laborans, varios errores occurres, qui reditus speciei SECCOMP_RET_ERRNO notantur. Ut errorem referat, ratio vocationis seccomp -1 loco 0 reddet.

Errores sequentes possibilia sunt:

- LICENTIA - RECENS ratio vocationis facere non licet. Hoc fieri solet, quia privilegia non habet CAP_SYS_ADMIN vel no_new_privs non ponitur usus prctl (de hoc postea loquemur);

— EFAULT — Argumenta latae (args in structura seccomp_data) validam inscriptionem non habent;

— EINVAL — Quatuor hic rationes esse possunt.

operatio petita ignota vel non sustinetur a nucleo in hodierna configuratione;

vexilla specificata pro operatione petita non valent;

-operatio includit BPF_ABS, sed problemata certa cum offset, quae magnitudinem seccomp_datarum structurae excedunt;

numerus praeceptorum ad colum maximam excedit;

— ENOMEM — non satis memoriae ad propositum exequendum;

- EOPNOTSUPP - operatio significavit actionem cum SECCOMP_GET_ACTION_AVAIL praesto esse, acinum autem non redit in argumentis;

— ESRCH — quaestio occurrit cum alius rivus synchronum;

- ENOSYS - Nulla actio cum SECCOMP_RET_TRACE coniuncta est.

pretl est ratio vocationis quae permittit programmata usoris-spatii ad manipulare (set and get) peculiares rationes processus, ut byte endianness, sequela nomina, modus computandi securam (Seccomp), privilegia, Perf eventus, etc.

Seccomp sicut sandbox technologia tibi videri potest, sed non est. Seccomp utilitas est quae permittit utentes ad machinam sandbox enucleandam. Nunc videamus quomodo programmata commercii usoris creantur utens filtrum quod directe ab vocatione systematis Seccomp vocatur.

BPF Seccomp Filter Exemplum

Hic ostendemus quomodo duae actiones prius dictae misceantur, scilicet:

— scribemus programmata Seccomp BPF, quae filtrum adhibebitur cum diversis codicibus redituum secundum decisiones factas;

— colum per prctl oneratis.

Primum caput capitis debes ex bibliotheca vexillum et nucleo Linux:

#include <errno.h>
#include <linux/audit.h>
#include <linux/bpf.h>
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <linux/unistd.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/prctl.h>
#include <unistd.h>

Priusquam hoc exemplum attentare, curare debet ut acinum cum CONFIG_SECCOMP et CONFIG_SECCOMP_FILTER ad y componatur. In machina operantes hoc sic inspicere potes:

cat /proc/config.gz| zcat | grep -i CONFIG_SECCOMP

Reliqua in codice munus est duplex pars install_filter. Prima pars indicem nostrum BPF continet instructionum percolationum:

static int install_filter(int nr, int arch, int error) {
  struct sock_filter filter[] = {
    BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, arch))),
    BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arch, 0, 3),
    BPF_STMT(BPF_LD + BPF_W + BPF_ABS, (offsetof(struct seccomp_data, nr))),
    BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1),
    BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ERRNO | (error & SECCOMP_RET_DATA)),
    BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW),
  };

Praecepta sunt utentes BPF_STMT et BPF_JUMP macros in fasciculo linux/filter.h definitos.
Eamus per mandata.

- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof (struct seccomp_data, arcus))) - onerat systematis et cumulat ex BPF_LD in forma verbi BPF_W, fasciculus notitiarum fixa cinguli BPF_ABS sita.

- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arch, 0, 3) - BPF_JEQ coercet utens sive valorem architecturae in accumulatore constanti BPF_K = arch. Si ita, in offset 0 ad sequentem instructionem salit, aliter 3 cinguli (hoc casu) ad errorem mittendum est quia arcus non congruit.

- BPF_STMT(BPF_LD + BPF_W + BPF_ABS (offsetof (struct seccomp_data, nr))) - Onera et cumulata ex BPF_LD forma verbi BPF_W, quae est systema vocationis numeri in certa cinguli BPF_ABS contentorum.

— BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, nr, 0, 1) — systema vocationis numeri comparat cum valore ipsius nr variabilis. Si pares sunt, ad proximam disciplinam transigat et ratio vocationis disables, alioquin ratio vocationis permittit cum SECCOMP_RET_ALLOW.

- BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ERRNO | (error & SECCOMP_RET_DATA)) - Rationem cum BPF_RET terminat, ac proinde errorem SECCOMP_RET_ERRNO cum numero errantium variabili producit.

- BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW) - Rationem cum BPF_RET terminat et ratio vocationis ad exsecutionem usus permittit SECCOMP_RET_ALLOW.

SECCOMP EST CBPF
Mirari licet quare index instructionum loco obiecti ELF compositi vel JIT programmatis C compilata adhibeatur.

Ad hoc duplex est ratio.

• Primum, Seccomp utitur cBPF (classica BPF) et non eBPF, quod significat: non habet tabulas, sed tantum accumulator ad novissimum calculi exitum condo, ut in exemplo videri potest.

• Secundo, Seccomp regulam accipit instructiones ordinatas BPF directe et nihil aliud. Macras simpliciter adhibitas adiuvent has instructiones in programmario amicabili modo specificare.

Si pluris opus est ad intellegendam hanc ecclesiam, pseudocode considera quod idem facit;

if (arch != AUDIT_ARCH_X86_64) {
    return SECCOMP_RET_ALLOW;
}
if (nr == __NR_write) {
    return SECCOMP_RET_ERRNO;
}
return SECCOMP_RET_ALLOW;

Post colum codicem in structura columellae definiens, debes sock_fprog continere codicem et calculi longitudinem computare. Haec notitia compages necessaria est ut argumentum ad processum declarandum postea ad currendum:

struct sock_fprog prog = {
   .len = (unsigned short)(sizeof(filter) / sizeof(filter[0])),
   .filter = filter,
};

Unum tantum restat ut munus install_filter facere - ipsum programmata oneraveris! Ad hoc utimur pretl, accipiendo PR_SET_SECCOMP optionem ad modum computandi securum ineundi. Tunc indicamus modum colum utendi SECCOMP_MODE_FILTER onerandi, qui continetur in prog variabilis generis sock_fprog:

  if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog)) {
    perror("prctl(PR_SET_SECCOMP)");
    return 1;
  }
  return 0;
}

Denique munus nostrum install_filter uti possumus, sed ante quod pretl opus est uti ad PR_SET_NO_NEW_PRIVS ad hodiernam executionem destinare et sic vitare condiciones ubi pueri processus plura privilegia accipiunt quam parentes eorum. Cum hoc, facere possumus sequentes pretl vocatos in functione install_ filtri sine iuribus radicibus habentes.

Nunc munus install_filter vocare possumus. Obseculummus omnes scribentes systema vocat ad architecturam X86-64 pertinentia et simpliciter licentiam dant quae omnes conatus intercludit. Post colum insertis, executionem continuamus utentes primo argumento;

int main(int argc, char const *argv[]) {
  if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
   perror("prctl(NO_NEW_PRIVS)");
   return 1;
  }
   install_filter(__NR_write, AUDIT_ARCH_X86_64, EPERM);
  return system(argv[1]);
 }

Incipiamus. Ad programmatum nostrum ordinandum vel soni vel gcc uti possumus, vel modo fasciculi principalis.c sine optionibus specialibus componendis:

clang main.c -o filter-write

Ut dictum est, omnes introitus in programmatis obstruximus. Ad hoc probandum opus est programma quod aliquid outputs - ls videtur sicut candidatus bonus. Ita se habet:

ls -la
total 36
drwxr-xr-x 2 fntlnz users 4096 Apr 28 21:09 .
drwxr-xr-x 4 fntlnz users 4096 Apr 26 13:01 ..
-rwxr-xr-x 1 fntlnz users 16800 Apr 28 21:09 filter-write
-rw-r--r-- 1 fntlnz users 19 Apr 28 21:09 .gitignore
-rw-r--r-- 1 fntlnz users 1282 Apr 28 21:08 main.c

Mirum! Hic est quod programmata nostra involucro utens similis est: nos simpliciter transire propositum volumus probare sicut primum argumentum:

./filter-write "ls -la"

Cum exsecutioni mandatur, haec programma omnino inane output producit. Sed strate uti videre possumus quid agatur;

strace -f ./filter-write "ls -la"

Effectus operis valde abbreviatus est, sed pars respondentia eius ostendit tabulas errori EPERM praeclusas esse, eundem quem nos configuramus. Hoc significat propositum non aliquid output quod scribere ratio vocationis accedere non possit:

[pid 25099] write(2, "ls: ", 4) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "write error", 11) = -1 EPERM (Operation not permitted)
[pid 25099] write(2, "n", 1) = -1 EPERM (Operation not permitted)

Nunc intellegis quomodo Seccomp BPF opera habeat et utilem quid cum eo facere possis. Sed non vis idem consequi cum eBPF loco CBPF plenam suam potestatem iungere?

Cum de programmatibus eBPF cogitas, plerique putant eas simpliciter scribere et privilegiis administratorum onerare. Cum haec enuntiatio plerumque vera sit, nucleus instrumentorum instrumentorum instrumentorum ad tuendos EBPF obiecta in variis gradibus distribuit. Hae machinae laqueos LSM vocantur BPF.

BPF LSM laqueos

Ad architecturae-independens vigilantiam rerum systematis, LSM notionem laqueorum instrumentorum. Uncus vocatus technice similis rationi vocatus est, sed systema independens et cum infrastructura integratur. LSM novam notionem praebet in qua stratum abstractum adiuvare potest ut problemata quae occurrunt, tractantes de systemate vocat de diversis architecturis.

In tempore scribendi, nucleus septem hamos cum programmatis BPF coniungit, et SELinux sola in LSM constructa est quae eas instruit.

Fons codicis laqueorum in nucleo ligno in tabella includunt/linux/security.h collocatur:

extern int security_bpf(int cmd, union bpf_attr *attr, unsigned int size);
extern int security_bpf_map(struct bpf_map *map, fmode_t fmode);
extern int security_bpf_prog(struct bpf_prog *prog);
extern int security_bpf_map_alloc(struct bpf_map *map);
extern void security_bpf_map_free(struct bpf_map *map);
extern int security_bpf_prog_alloc(struct bpf_prog_aux *aux);
extern void security_bpf_prog_free(struct bpf_prog_aux *aux);

Uterque autem in diversis gradibus supplicii vocabitur;

- security_bpf - peragit initialem repressionem exsecutorum systematis BPF vocat;

- security_bpf_map - cum nucleo remittit tabellam descriptor pro tabula geographica;

- securitatis_bpf_prog - cum nucleo tabellam descriptor reddit pro programmatis eBPF;

— security_bpf_map_alloc — impedit num campus securitatis intra BPF tabulas initialized sit;

- security_bpf_map_free - num ager securitatis intra tabulas BPF purgatur;

— security_bpf_prog_alloc — impedit num campus securitatis initialized in programmatibus BPF sit;

- security_bpf_prog_free - num ager securitatis intra programmata BPF purgatur.

Nunc, his omnibus visis, intelligimus: idea post LSM BPF interceptores esse se praesidio omni obiecto eBPF posse, ut solum ea cum propriis privilegiis operationes in chartis et programmatibus praestare possint.

summary

Securitas non est quod efficere potes in uno mensurae vicium ad omnia quae vis tueri. Magni interest ut diversis in gradibus ac diversimode systema tueri possint. Crede vel non, optime disponet ordinem tutelae diversos gradus disponere, ut securitatem unius gradus reducere aditum ad totum systema non permittat. Corres tincidunt magnum officium fecerunt ut nobis copiae diversae laminis et tactus essent. Speramus nos bonam intelligentiam dedisse vobis qualium ordinum sint et quomodo programmata BPF utendi cum illis operandi.

De auctoribus

David Calavera eft CTO apud Netlify. In Docker operam navavit et ad Runc, Ite et BCC instrumenta evolutionis contulit, necnon alia aperta incepta. Notum est opus suum de Docker inceptis et progressu Docker plugin ecosystematis. David valde iratus est de graphs flamma et ad optimize effectus semper spectat.

Laurentius de Fontana in aperto fonte manipulus Sysdig operatur, ubi principaliter in Falco, a Cloud Native Computing Foundation project, qui securitatem runtime et anomaliam detectionem per nuclei moduli et eBPF praebet, praebet. Iracundus est circa systemata distributa, programmata retis definita, nucleum Linux, ac analysis perficiendi.

» Pro maiori de libro, quaeso, visita publisher's website
» mensam de contentis in eodem
» Excerpt

Nam Khabrozhiteli XXV% discount in coupon - Linux

Post solutionem chartae versio libri, electronica mittitur ad electronicam.

Source: www.habr.com

Add a comment