From d8c22a9589e0f95bc27d52f0aeb7618fd116173d Mon Sep 17 00:00:00 2001 From: Alexandre Dulaunoy Date: Sat, 29 Dec 2018 21:43:09 +0100 Subject: [PATCH] new: [a.2] pymisp slides added --- a.2-pymisp/awareness.png | Bin 0 -> 95101 bytes a.2-pymisp/content.tex | 365 ++++++++++++++++++++++++++++++++++++++ a.2-pymisp/logo-circl.pdf | Bin 0 -> 9230 bytes a.2-pymisp/misp.pdf | Bin 0 -> 7938 bytes a.2-pymisp/misplogo.pdf | Bin 0 -> 5683 bytes a.2-pymisp/notes.md | 89 ++++++++++ a.2-pymisp/slide.tex | 28 +++ build.sh | 2 +- 8 files changed, 483 insertions(+), 1 deletion(-) create mode 100644 a.2-pymisp/awareness.png create mode 100755 a.2-pymisp/content.tex create mode 100644 a.2-pymisp/logo-circl.pdf create mode 100644 a.2-pymisp/misp.pdf create mode 100644 a.2-pymisp/misplogo.pdf create mode 100644 a.2-pymisp/notes.md create mode 100644 a.2-pymisp/slide.tex diff --git a/a.2-pymisp/awareness.png b/a.2-pymisp/awareness.png new file mode 100644 index 0000000000000000000000000000000000000000..3bacbde752d1443fad67b472fdf7979ced1a9c22 GIT binary patch literal 95101 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≫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

4DTa8vfGG+5&10HyDr({#Ti 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

Y$dHqu+ZfzwP-;`zNM^aTOkams5lTxCgI zkqo}S!d6AkKhH{IP***9QcPGFH1ZNq5WN!Y0t)R;ojTQ;WzHpS&mPIW-tU$m-*FOjjuKuhxkGOhjYIt4vW^5vYqJ)G^m$%$eHsu}L zpyK$O{U+O$LPWGT)`2-O59pxln33eZn&-vp?Q-M{xE5vyPSF3v~i~MEOw(}%@6@VunHc(PIm#Uw3@M=$2bF(wvDUhLap|43UAOxV! zwp|BlxipA0B^#SD@;%y>$Y9YcArjqaqkVHM1Q?Do0X*9kk!#nk(QnAdR#-sK0f|TG z_E0+Fdsg-F*}&)lAelZnOIR=P7K^XRKyW(Cu0aZf*ZM)sfdh4^i^g??=i;089EXKa zQSo;VOh_Q=>y{Y)yj&pmMsy03xyBpI^M_`Aa>JeaLbKJM?L7lW2LsdAu!)j~+P{Bj z==X3VU&<}=)YP&vGcB$AReji17Sbi#sHiG>c+)iqFi7yO=tBg_3#T?RM1Ql*7k63G zQm17yEHjT#2(`3ZhLHCa+7Gw;<+pHl8Zfh;>2zq9?Oo?HHX87O|b&c@#U0Ug6ey{Y3r-bEy>u5fM@_g2YX zLEc|KH(e(pfEs@&R0fl0_JhSRFwjkDM*F!SB^rAxJlPnKxIWk%zO_S6*(qFMIpi0fx<K0O!_arG1SS`b4pcP8%f_I zj)RomwBEP*o|(SBe@|SJrXYDs zN@f%7KRv8{AQ_3yEo`G$IXAH*M|wVfyo}5%Se%I)TVc}85u=!h5wi#G>esGK6DM#j zis*?&e6*6BZWP)DRM8it6g)^f_=qM_ZC=FwW!P`N6)>f1Sq>oGxw%q5BAHRP2 z@^)74&>^DX5fpskv$0-ZUk|6ds3%QIO1h0*hK`f-^SPX-PoEN#dWf_T6d~>RQP>-d zJt&j8IcIzUoe;>U>mD9GMNS|=-*t3ERakTtyU=((xNz(klGVt!L*Bvj9Q z>hC&wCTt6S_C(&(71AyM0HT}=e?2#R3PskKASfj09WSeTP?l;oP?S5ExmFJV?NP&rmG%u_@eD_66)Bu5t6-d(AgZ0rumKRPAFclx}Hr=ms z;zTvr0YHxaB|S7>(bc6>0xeYxx>l1pA)EW+{*GH)X!7m5m+{$dMg$yOwbEV8Vu2e?gQq8RKn%Grk}ClUSUWoOGEm4yHoA_Y5u&=X*d@zh^OLVrB-<><-}{ z6ZH_3A!qWh7^|t>#S}suLMYiiK@}jc{Q(-C!9ngm@uA?Y?ab*gV<t2Y4?mT#PXHrl;HtGgP;Y!kI#wzgWOsLo#nm z_~Ky}K#&x@i!NOsWbOGPKbR%ToFA$g=K7S@SLPU(oTkvrsQ(vCZ_hL{%d=wy4I zEmBixw2G4qH1BF=)`JWM((AASdVb!o-plaAc!;C*`_&#gj4-anv#-mq4 z7W{7QW}KY{1&jHULxN=uE6Wa*1CiZPvQcLR?EqNteax6kBUkl?65p`&2 z%q}bt+buu@WzEU(cK^YHkQ(z4&YV3LHtJpyFGaBMVY@H!O?Yup#HXV8nSIj2+b4`uhIuZVluSrP$v$XS$QXJzp z5*_Q;V+Ax#^Rxb>p-U|QxKL`=Po9GGrsx2Os^gPqBrOhS9y_2&5+RE=I`Gv zet5PeJ{Z(m-t=sjK!}OfFqNW`nr|Rjs0%wWFC9|Ntkb6w=tWag-Cz(k)t~Z*Y@gw+IMTkl0;6V+e zPU|Lie(6giYP~rm-14cJw~He=BNc?#s%$fE2Luev9tY(Fo_1;W=f_pURJ0kMNA?Oq zO|Gax%ilLhELtmq?y(diZa6>0J;dh45OZjJhF}|NS?FE#GR@0R7Cr)32p8rx){T%G zh@L>$Y-?*f^U#e75p4SG0m!%WGL{D`-+!+mYDc^ZVnxCk!=E8hWr8k z?)U?Cp|qKQCIIyrYg{}NDePkZqp3K4{5IOaDl5MO2?7f5OP?tU!Z1XWpo4zU zpuE7E+`M`8)G7M;3B(0YG;Pp47?Jyw`7*M1?=`?^F|8Z?bgFt&S{kYOqu6DXP6;uR z`)AbDa5U)sE7j(_hw%QKin8*(od@b5{DHwlkS@YZ;}fA7g2XbyPQ<9-6CjTO<8tL- ziAMDFzmQ)3rX8V_|DM%aB{F~KlE*WQ^IpIpL-S z$z17qQw05?#^p_?ZxV=awRS&6WwCJ4sq=_uksJS7?&BjRm51ks(r)0Y%Mo)94WT`I zxViW(X{~mih6=>U=n2yHFxQAI5WOiBH*N}f@E%zs0 zYThqHyLkDleII)Ja*Nz_2;t>Vur2i2I1*M1LF(8PJOmfG%Wn&YBtUWr0gqZDww$K^ zvvlu~GsJX2EIazUG=2RF)#|%mbUykI+?va^YoJ-scFP|bE#R1J<;#~ZPcyhq_H;Kj zRSr!5_#D%DeMDhxjxp#xRt6kVXSq*#Y%J&FBNlH-##A62ghvK)LVHF?9>Vc2J9iRu z@>_3G@@xx`0>K2mG>$}PM+Z@u3p)!5Z{6q5A0E(!Qb|fkWG5vF$jWv!H@`wdV!(O) zDK8&0crZO9BWBI+iXdiG*UhI^53$PVRz|BF3QNtf>`M< z*Hq*Dar=Kzk=17)*8FcO@}V)WWe_*}r6ewHN)2xI=QSZ;q-fbB-!(RZA#;L$$=!So zGRD=_Rg8=TITyN5b(qI`#(IrRq72c}v`!X5ve(C}UZfnEu;(3OLpApS5` zc`}>v9-ZX={h&*mo0`r^MuI-(GI<9ZMX$uZ?Wf=51J-?{JOmELT~app9zHx3K>Hu4 zJH}qA|0~A^P6x3EG40!8XwE}`^6-BM8EJ(6OCkD`*#lG|6rweJ*ERl2SV|UzhV?jJ|yov5no?(VKlPn_eRsU<&f?%f?QyyqKX03Dzz1}_Y*Q~>Uv+u)C0 z*0;q{`P>tlZQIO{l0a-T&HU)$!-_r!^e@>=6~M|M0;Ef&j_{0I~o~F$YJ3 z3PpEv;2gpiDD4#r#WP7zf6%Y+Sc;X_$!WH(PW`aJ?%gL04c(Azbyo+=>fj);q;lcH zg)bv>uzlM&53`o+@j?KJ&SKzBFSE_UT3e3D4lb zKpv_vP*!)Rfo*DyhY%7G(TZ0Mh$?)9Dk7xszh#{ZC;yv^96uXkOcU=+uru(Gy!hMO zd&8@2r$G)hL24%}lTPFwz1uK_Da&+9i2uM?%|Nu6_2R{cJ_kgq`B&O+(NX`Q1KEF| zgBX$_&^Qqa;{T{olY!tvO=NLI?j2p;bSryvQb*2 zW}bILjsR!(%FpWSTc10pG!ychVq|!jpPxVd%B#hIVAy#Ov&V)*p$zk?adMr0=YrA+hG^wMp7-omM@e%zZM-yskLV z%8yjhl7WE%iG3)^kkA9Ra3|wo|3RmOyaJ@1s#;p6MUK|$>VXhleu|W;6_3eQfslTU zRqRSN z|4F%7$$XU6Z;ouUB^AN%ktPm2vIv}VuAdqjCIL~9ltUI&Tl!qcmt*Qna42NKdr;M* z3qc$F8VIAV_wJsasNW%mv$Nvg7-|NM=BgcvOa#O3PBP=UWAo1g&W#=>iwgD-Fio>;EHu{3qs6dnWG*;-oyIbR;?Ygb)`fQ{FY7yiZqGTU%j{ zc$AkwzKvZ~(hrKlh>!BFW2~_Wg@x|u1+ZxB+LW~=WbX_NyIS4r`g8Bn`jL#IQ(E+5 z&JKH<6M0BbTwFW3>r|5=q3v=R#2J zluAx4m$4G!L_pR`dpdbx!TM*!)Lnk^7qFE)N&tz8-I4^LB^%fFvBo46H zP>!JB6X27Xg#`uN57?w$RB43^Y)(l_iw+H)fpimL2Ar&czWy5GVQhlI$<0!zU;)<) zRwKi-#6VAP7QP)K93U9prE3J}y>xVSn}8>f3A<`-t#4$6x~S2gKU@0@#E@MD#jsP_ z-sJlAC1hyV%Zc64QcYN7)<3@`k*Xo#C2$L$kz(m?z$qM_%&zSB8{)vhdDY0 zFD9GDjya=cTmmeJ_b?lQ$ z-@@8uoBF(--{}k1>~RfeM!o!Q-9l}&ChZeR>$=@>H*yhWgGoYOH^X41@dOw0hMw;3 zPew&7PQCE4-MacZn$^Pht~pxB#=%J-d+35)f#i78l`18qnkm8dLPNNjoLo4ZSU=R` z)!y}p|Nak)eirINF4nckuuAZMQ2n9lBOL=n)1_ZuAktO8tfP^qf>I5QUVH${NWiCI z>B5=u%w8-|pP_yV#dy`4TNWYSPq?{Od48mY<5!2xIGnqeRZ9v|A(t7S`qGBRzA zjn}ZvOe)43o<8s#PGY{JoLt*|<#WEDQV=r{?iC;$$pP{O}6yq_z zPTm=9Oaxmd$1HkgKZa0)+66uNvA0)2UcNL1dSzy03c&C(i<_N(pUv01B=f=%*>7#VQ5v1-rH2sm)3QDYNym z+qbvoC3iQGv##lCNQbYEX!~@4)C0}{AB%dq-&pR~t3n{!QA}oyzLiMS<5)Eup8W(a zEiNSFi=%X4(SKc`e3`kMyj>mh*1`EZ+S7b~a-|SUSq@E-fuHr%cA~(lFq{;Nw3KHfv&hQMC# zS=G(=$=~MJX~&5!O%$dk#|c&Ze*b>{b1G+f^rew>5>|($_TTrDT26XtMLo}6Znn-c ztad*v^~rJR2D~q%sh?|WPo=dymZSc3tKyeLA;Y%sTw{YXT$!c^t$*;BnqA#!XeDfF zBa|hS2`cnHudylhVzC{#Mk1mn7$I#UTBc`Yqn@3V^%$i-cA!mBguvvopg^9+mq1A| zB_+MPWoEZ`=QmT4N368bfNzn65yy5F8Q-`=LQH&Q%k8o>BzEx*ZhD0!f4=;FxUKh_5G9YYx_TW< z4wQ!F%fI%{ibZYBJD)Af8B0Zx{>$52kl6FgH|d(dY8<mu7KiYmVk4=J2Ey$2qp2rZ%nq3@UOc8Z@akq&XZs5u z!v=x#yJ>h1#;sr`p zSuDw+(&M}RZU27FjgKFWbv)HR>D{VJNVc+0*IGI2t@f}(jcpg}a@={r)R;#~cZPZ= zRt5@IDsOmjdXH=snrRx3uKM<7Z$$0q()qHiw30?YdxhDx4|9AS{n6W8=Y!|RW&^4} z1T4*6S(-De-l5dIfB&c6629O4#;+44FE-0qRx;>_()M<6ELLxM-%^}qTfcF5ws|6* zHmTC`L&(e46ZbDuEe*d0(ZN0a>K(dg&yVl6 zJLEp1)X#EuMkCP7eSb%L#q?LM2c^@$e>RgAcPjy9%ZF#5)A1gZm>U@AH7WM` zI_LDremquQ(B zM>5lV*e${-t}FLfex@!M@$Yx~N>`|PZftnpndYGv72S0tabBV;w=bP`;db9X$u2|U z16o|%J{9hu)*T~9A!bd*!#VLo)J|=0VRJ*;%DZ(xGp+;n?vnw@-j8o6h6#8Lj`#0u zy{dTWb5XZ3+w6%4JCw%ikL)EpIVjOId~;&|0WWu}IJ$GSZM9zmlt+Fq@5aWzcHrvT z-72mR3U-TyZc$OLv08W*mS_nt)#m$kGk5f_MteWFeRVuP49y5S_t`z5>rbwm;ag%U zuP>LW+@R-q*Y}2D?CTfqu-fMr-xBC1KOFgOKc=U2 zXZgc%aa$H1Cyh2sbbgGlUc6)VMZM#I_Mt7g(3U8CXFO=bJM{QT*0YwOU-d(;ep4s28#Tx3s#=2cI}D=TyLCv*>v9k(u;tNc9~ELL(Tg+N!3DtwQ#ApJ#gOIfCkM{coy zNt3aM|*TEh3a=H>`9X^CpY5gsS}F)%HSKqtO+m;5V3MSZW*SEVUST-M#qcM?ug zzi%yy>@}|qni}6RICNh96&z~-; zQ(CO6c>QC*z5>zY2W3mG;_Tx)a&9JIQyq~0Wlo^;-(fAfX`8F7(w$$omks2in!?H- z2#NOY-CIQ)Oi#S8wl1<80;?=bFS|=*WJi9D_8eNY)^-c7>R?wW$W(Y7vEG+uF2c?+ zIo>Z!aL`K?{LS@h;7T!F|3uRJ%ai*>3a?g zy|`Ru%+|fOxMMt)CfR2(hr4cr-t^d7Z2DL1^DE_>L^siwl@jQZX|gnXi)yP|#trm` z0(Zx`8p`fE!e_WU>1I0Z&ntDT-FwsK@BQ_3CMWh*a*U5lYk6BXu6Li9ae~=X@RHq^ znEgGYe4@i`-)t{07mHY?uF(yLcMtML)cucD`tpdbeCxW1tf919!Tj|fLMd7)U0&B0 zFC-}u{T^;DoceuXe74GYLDkFAZ1NMG!Pz zt-db%b(nXn={TxU?O}w}{j2z5d-et>^vtZjp*wfSJZ@oN-R0PFUzU@UwbEkI^(ReX z)N*oU#%!P4AMGnPG#F>&BQ8|-q4uokO`}Jp2gIY-rB}wB{CEwu+`oM*ig!Bn^znL7 z=ZWA8@)g8fpYMa@L{lp1U%#7UjHRi47N>Lb{1WGU_Y*&bMhV4( z&l@jXi6I_#-xZF6#Q*o3xw|!R3Y6IEGo`i-oIJ|lEt}myaXGnT*khu5QVcS z7v_+4uK6}Xd`3mv#(bB``b=n`1qE$DT{WEr?&{d=vaGJxuhV@vTnO3mU>)6K}pN1&vk(c8lW?NR>8KUP_G%PdPDnth-{ z1T zgkT3MW~8y(WQB-#Kg=XDqv;-Z#0%Xx2y|o=+va9x_lk<5D&{h}18QorA95T7X_SjJDJ#ck4wQDoIUc_`JeyPlE@y}TmN99uaAeYM_8Ca=@nDYnG9Eq-$g2zUI{{L zYMv*YpQvA*$vBw|ISZo_0$cJeTTo_G_f3s>eiV}}l6Vgz|D2$61&lcaooI{m@Sy8R zlQn7r5ZRc#zSIKF4|42*fq{%LZCfa*4bPs9j*S%~pl0tl1dS*O$_V?jM^9F$s}w>I zfSP6+YHDy4kopJ`&^BzWr*sA60J7naMbExyB~CbCW@Wt)b3;}NTN70p(EZ3`;sZ!X zq(5Du=>Gc?kK((vXzOcg;#JGyF7Dq+UUPf@&U)PE{oA4*S1(=|CJDCZZ0c+Z4Tanx zIPfl;{JEF@jKti&g{MI=!#2gxa2HF{nPQaA@hC&$I#WH0<~RS?v*`q0_UzPm?^sNm z#YV$gFFPKfb)Lf1AGtSt`nq2$!I=@J+`NEQ<|ee%57!B zj~ynviP_3K4tMeR4(NPp}O``F#peN5>X-iyt}sZPEVVow{?HE&Gw zh&Q|~TmLK^ZX89lnqMkdix|xG&U(&#D*EK~bLY;9!s4QxcbfG_PO{4z7@Sex@?a&d ztf(mc`QXa=>Qt8&n~M&L8(#uv0)LN6cNMzG4RrZOb)3oDPu$D#e*1I@muINOF28o0 z*uT6mKKlLp1@0N$iT7Z{@_vvT893>M3GS{I(Yo$D`($>~37*<;r8;l#UclcEr!Yjf885ad8IuKdS|DV`g2btc{) riG|p|__<1{zCZtDMD;IwYH)+ZW$8=UUNNyhK2c5Oq;jT`#jXDZkLYo* literal 0 HcmV?d00001 diff --git a/a.2-pymisp/content.tex b/a.2-pymisp/content.tex new file mode 100755 index 0000000..59384ae --- /dev/null +++ b/a.2-pymisp/content.tex @@ -0,0 +1,365 @@ +% DO NOT COMPILE THIS FILE DIRECTLY! +% This is included by the other .tex files. + +\colorlet{punct}{red!60!black} +\definecolor{background}{HTML}{EEEEEE} +\definecolor{delim}{RGB}{20,105,176} +\colorlet{numb}{magenta!60!black} + +\lstdefinelanguage{json}{ + basicstyle=\ttfamily\footnotesize, + numbers=left, + numberstyle=\ttfamily\footnotesize, + stepnumber=1, + numbersep=8pt, + showstringspaces=false, + breaklines=true, + frame=lines, + backgroundcolor=\color{background}, + literate= + *{0}{{{\color{numb}0}}}{1} + {1}{{{\color{numb}1}}}{1} + {2}{{{\color{numb}2}}}{1} + {3}{{{\color{numb}3}}}{1} + {4}{{{\color{numb}4}}}{1} + {5}{{{\color{numb}5}}}{1} + {6}{{{\color{numb}6}}}{1} + {7}{{{\color{numb}7}}}{1} + {8}{{{\color{numb}8}}}{1} + {9}{{{\color{numb}9}}}{1} + {:}{{{\color{punct}{:}}}}{1} + {,}{{{\color{punct}{,}}}}{1} + {\{}{{{\color{delim}{\{}}}}{1} + {\}}{{{\color{delim}{\}}}}}{1} + {[}{{{\color{delim}{[}}}}{1} + {]}{{{\color{delim}{]}}}}{1}, +} + +\begin{frame}[t,plain] +\titlepage +\end{frame} + +\begin{frame} + \frametitle{Context} + \begin{itemize} + \item MISP is a large project + \item Your production environment is even more complex + \item 3rd party services are even worse + \item Querying MISP via CURL is doable, but get's painful fast + \item Talking to MySQL directly can be dangerous + \item POST a JSON blob, receive a JSON blob. You can do it manually(-ish) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Big picture} + \begin{itemize} + \item Core goal: providing stable access to APIs, respect access control + \item Simplifying handling \& automation of indicators in 3rd party tools + \item Hiding complexity of the JSON blobs + \item Providing pre-cooked examples for commonly used operations + \item Helping integration with existing infrastructure + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Common queries: Recent changes on a timeframe} + There are 4 main cases here: + \begin{itemize} + \item Metadata of the events that have been modified + \begin{itemize} + \item {\bf search\_index} $\Rightarrow$ timestamp (1h, 1d, 7d, ...), returns list of all the modified events + \end{itemize} + \item Full events (metadata + attributes) + \begin{itemize} + \item {\bf search} $\Rightarrow$ timestamp (1h, 1d, 7d, ...) + \end{itemize} + \item Modified attributes + \begin{itemize} + \item {\bf search} $\Rightarrow$ controller = attributes and timestamp (1h, 1d, 7d, ...) + \end{itemize} + \item Other use case: get last {\bf published} events by using the last parameter in the {\bf search} method. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Common queries: Search things} + There are 3 main cases here: + \begin{itemize} + \item Easy, but slow: full text search with {\bf search\_all} + \item Faster: use the {\bf search} method and search by tag, type, enforce the warning lists, with(-out) attachments, dates interval, ... + \item Get malware samples (if available on the instance). + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Common queries: create things} + There are 3 main cases here: + \begin{itemize} + \item Add Event, edit its metadata + \item Add attributes or objects to event + \item (un)Tag event or attribute (soon object) + \item Edit Attributes medatada + \item Upload malware sample (and automatically expand it) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Administrative tasks} + Assyming you have the right to do it on the instance. + \begin{itemize} + \item Managing users + \item Managing organisations + \item Managing sync servers + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Other Capabilities} + \begin{itemize} + \item Upload/download samples + \item {\bf Proposals}: add, edit, accept, discard + \item {\bf Sightings}: Get, set, update + \item Export {\bf statistics} + \item Manage {\bf feeds} + \item Get MISP server version, recommended PyMISP version + \item And more, look at the api file + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{MISPEvent - Usecase} + \begin{adjustbox}{width=\textwidth,height=3cm,keepaspectratio} + \begin{lstlisting}[language=Python,firstnumber=1] +from pymisp import MISPEvent, EncodeUpdate + +# Create a new event with default values +event = MISPEvent() + +# Load an existing JSON dump (optional) +event.load_file('Path/to/event.json') +event.info = 'My cool event' # Duh. + +# Add an attribute of type ip-dst +event.add_attribute('ip-dst', '8.8.8.8') + +# Mark an attribute as deleted (From 2.4.60) +event.delete_attribute('') + +# Dump as json +event_as_jsondump = json.dumps(event, cls=EncodeUpdate) + \end{lstlisting} + \end{adjustbox} +\end{frame} + +\begin{frame} + \frametitle{Basics} + \begin{itemize} + \item Python 3.5+ is recommended + \item PyMISP is always inline with current version (pip3 install pymisp) + \item Dev version: pip3 install git+https://github.com/MISP/PyMISP.git + \item Get your auth key from: \url{https://misppriv.circl.lu/events/automation} + \begin{itemize} + \item Not available: you don't have "Auth key access" role. Contact your instance admin. + \end{itemize} + \item Source available here: git clone \url{https://github.com/MISP/PyMISP.git} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Examples} + \begin{itemize} + \item {\bf PyMISP needs to be installed (duh)} + \item Usage: + \begin{itemize} + \item Create examples/keys.py with the following content + \begin{adjustbox}{width=\textwidth,height=.9cm,keepaspectratio} + \begin{lstlisting}[language=python,firstnumber=1] + +misp_url = "https://url-to-your-misp" +misp_key = "" +misp_verifycert = True + + \end{lstlisting} + \end{adjustbox} + \end{itemize} + \item Proxy support: + \begin{adjustbox}{width=\textwidth,height=.9cm,keepaspectratio} + \begin{lstlisting}[language=python,firstnumber=1] + +proxies = { + 'http': 'http://127.0.0.1:8123', + 'https': 'http://127.0.0.1:8123', +} +PyMISP(misp_url, misp_key, misp_verifycert, proxies=proxies) + \end{lstlisting} + \end{adjustbox} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Examples} + \begin{itemize} + \item Lots of ideas on how to use the API + \item You may also want to look at the tests directory + \item All the examples use argparse. Help usage is available: {\bf script.py -h} + \begin{itemize} + \item {\bf add\_file\_object.py}: Attach a file (PE/ELF/Mach-O) object to an event + \item {\bf upload.py}: Upload a malware sample (use advanced expansion is available on the server) + \item {\bf last.py}: Returns all the most recent events (on a timeframe) + \item {\bf add\_named\_attribute.py}: Add attribute to an event + \item {\bf sighting.py}: Update sightings on an attribute + \item {\bf stats.py}: Returns the stats of a MISP instance + \item {\bf \{add,edit,create\}\_user.py} : Add, Edit, Create a user on MISP + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Usage} + \begin{itemize} + \item Basic example + \end{itemize} + \begin{adjustbox}{width=\textwidth,height=2cm,keepaspectratio} + \begin{lstlisting}[language=python,firstnumber=1] + from pymisp import PyMISP + api = PyMISP(url, apikey, verifycert=True, debug=False, proxies=None) + response = api. + if response['error']: + # + else: + # + \end{lstlisting} + \end{adjustbox} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Concept behind AbstractMISP} + \begin{itemize} + \item JSON blobs are python dictionaries + \item ... Accessing content can be a pain + \item {\bf AbstractMISP inherits collections.MutableMapping}, they are all dictionaries! + \item ... Has helpers to load, dump, and edit JSON blobs + \item {\bf Important}: All the public attributes (not starting with a \_) defined in a class are dumped to JSON + \item {\bf Tags}: Events and Attributes have tags, soon Objects. Tag handling is defined in this class. + \item {\bf edited}: When pushing a full MISPEvent, only the objects without a timestamp, + or with a newer timestamp will be updated. This method recursively finds updated events, + and removes the timestamp key from the object. + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{MISPEvent, MISPAttribute, MISPObject, MISPSighting...} + \begin{itemize} + \item {\bf Pythonic} representation of MISP elements + \item {\bf Easy manipulation} + \begin{itemize} + \item Load an existing event + \item Update te metadata, add attributes, objects, tags, mark an attribute as deleted, ... + \item Set relations between objects + \item Load and add attachments or malware samples as pseudo files + \end{itemize} + \item {\bf Dump} to JSON + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{MISPEvent - Main entrypoints} + \begin{itemize} + \item load\_file(event\_path) + \item load(json\_event) + \item add\_attribute(type, value, **kwargs) + \item add\_object(obj=None, **kwargs) + \item add\_attribute\_tag(tag, attribute\_identifier) + \item get\_attribute\_tag(attribute\_identifier) + \item add\_tag(tag=None, **kwargs) + \item objects[], attributes[], tags[] + \item edited, all other paramaters of the MISPEvent element (info, date, ...) + \item to\_json() + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{MISPObject - Main entrypoints} + \begin{itemize} + \item add\_attribute(object\_relation, **value) + \item add\_reference(referenced\_uuid, relationship\_type, comment=None, **kwargs) + \item has\_attributes\_by\_relation(list\_of\_relations) + \item get\_attributes\_by\_relation(object\_relation) + \item attributes[], relations[] + \item edited, all other paramaters of the MISPObject element (name, comment, ...) + \item to\_json() + \item Can be validated against their template + \item Can have default parameters applied to all attributes (i.e. distribution, category, ...) + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{MISPAttribute - Main entrypoints} + \begin{itemize} + \item add\_tag(tag=None, **kwargs) + \item delete() + \item malware\_binary (if relevant) + \item tags[] + \item edited, all other paramaters of the MISPObject element (value, comment, ...) + \item to\_json() + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{PyMISP - Tools} + \begin{itemize} + \item Libraries requiring specfic 3rd party dependencies + \item Callable via PyMISP for specific usecases + \item Curently implemented: + \begin{itemize} + \item {\bf OpenIOC} to MISP Event + \item MISP to {\bf Neo4J} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{PyMISP - Default objects generators } + \begin{itemize} + \item File - PE/ELF/MachO - Sections + \item VirusTotal + \item Generic object generator + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{PyMISP - Logging / Debugging} + \begin{itemize} + \item debug=True passed to the constructor enable debug to stdout + \item Configurable using the standard logging module + \item Show everything send to the server and received by the client + \end{itemize} +\begin{adjustbox}{width=\textwidth,height=3cm,keepaspectratio} + \begin{lstlisting}[language=Python,firstnumber=1] +import pymisp +import logging + +logger = logging.getLogger('pymisp') +logger.setLevel(logging.DEBUG) # enable debug to stdout + +logging.basicConfig(level=logging.DEBUG, # Enable debug to file + filename="debug.log", + filemode='w', + format=pymisp.FORMAT) + \end{lstlisting} +\end{adjustbox} +\end{frame} + +\begin{frame}[t,fragile] {Q\&A} +\includegraphics[scale=0.5]{misplogo.pdf} +\begin{itemize} + \item \url{https://github.com/MISP/PyMISP} + \item \url{https://github.com/MISP/} + \item \url{https://pymisp.readthedocs.io/} + \item We welcome new functionalities and pull requests. +\end{itemize} + +\end{frame} + diff --git a/a.2-pymisp/logo-circl.pdf b/a.2-pymisp/logo-circl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..62c9239fbfa4e3807901e3754db322c2cb69ec09 GIT binary patch literal 9230 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 T{gqu1NRS_skx^Dv4)cEi-2Ec4 literal 0 HcmV?d00001 diff --git a/a.2-pymisp/misp.pdf b/a.2-pymisp/misp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f7a3f9dec316930bd0e88813b3c448e1f1993d8f GIT binary patch literal 7938 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 literal 0 HcmV?d00001 diff --git a/a.2-pymisp/misplogo.pdf b/a.2-pymisp/misplogo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60da56889e07735aa51a541e4d0a2a1bb90ca9ec GIT binary patch literal 5683 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 literal 0 HcmV?d00001 diff --git a/a.2-pymisp/notes.md b/a.2-pymisp/notes.md new file mode 100644 index 0000000..8bc34bd --- /dev/null +++ b/a.2-pymisp/notes.md @@ -0,0 +1,89 @@ +MISP is a huge beast hat oes lots of things you really don't want to mess with. But our approach is to make your life as easy as possible to interconnect it with 3rd party services, within your own organisation, and to the outside world. + +We already talked about syncing, connecting it to TheHive, and sending HTTP requests to it to get information out of the platform to push it into your SIEM for example. + +It is nice and all, but at the moment you want to use something else than extracting attributes in CSV, or updating the sightings, it get's tricky to do it with bash and curl. And please, please do not connect directly to the database: it bypasses all ACLs, and if you start editing the datasets, you will most probably break it: there is a lot of data-massaging done when the data enters the system through the web interface, bypassing it will end up in a disaster, and we won't be able to help you. + +Before going into the PyMISP internals, let's discuss a bit the API itself. + +The format used to push and recieve data to and from a MISP instance is JSON. In the past, there was an XML interface too, but this one has been deprecated years ago. If you're still using it, you should know isn't supported anymore, and hasn't been in the last 2 years, at least. + +To query the interface, you send a JSON blob, and it will answer with an other JSON blob. In Python, it is easy, you can load a json blob and get a dictionary, and dump it back to json. It is relatively simple to do it manually for simple requests such as adding a tag, getting the most recently updated attributes, but it get's pretty trycky when you want to run complex search queries, or create new events. + + +This is the reason we developped PyMISP. + +PyMISP has two main interfaces: the first one is directly interacting with a remote MISP instance. Keep in mine that it follows the same access control rules as the ones defined for the account on the web interface. + +In order to use the API, you need to get the automation key associated to your account -> URL +If you don't have one, it means your user doesn't have the "Auth key access", you will need to get in touch with your org admin, or the administrator of the platform. + +With the key, you can access the same data you can see on the web interface. + +# RO + +The most common requests we see are the following: +* Get the most recent updates on a timeframe +* Lookup attributes or campaigns + +## Recent changes + +There are 3 main cases here: +* Metadata of the events that have been modified + * search_index -> timestamp (1h, 1d, 7d, ...) + returns list of all the modified events +* Full events (metadata + attributes) + * search -> timestamp (1h, 1d, 7d, ...) +* Modified attributes + * search -> controller = attributes & timestamp (1h, 1d, 7d, ...) + if you want to get all the attributes of a modified event: controller = attributes & timestamp (1h, 1d, 7d, ...) + +Other use case: get last **published** events by using the last parameter + +## Search + +* Easy, but slow: full text search with `search_all` +* search by tag, type, to_ids flag set enforce the warning lists, with attachments, date interval, by organisation +* get malware samples + + +# Write + +add event /attributes/tag/objects, ... + +Upload malware sample (with or without the expansion) + +(overview, no creation yet) + +# Admin tasks + +Assuming you have the proper access, you can also do plenty of administrative tasks through the API, such as managing users, organisations, and sync servers. + + +# Offline creation of a MISPEvent (usage) + + +# Examples in the example directory + + +# Internals of the module itself (dev) + + +Organisation of the project, muttable types + + + + +-------------------------------------------- + + + +In order to make your life easier, we developped a python modules that will help you to programmatically interact with a MISP instance: PyMISP. + + +PyMISP has default settings for plenty of comon use cases which simplify the interactions with MISP as much as possible. + + +PyMISP is the recommended way to programmatically connect MISP to your internal systems, in Python. + +It uses the API, which means it is diff --git a/a.2-pymisp/slide.tex b/a.2-pymisp/slide.tex new file mode 100644 index 0000000..7e9e3b0 --- /dev/null +++ b/a.2-pymisp/slide.tex @@ -0,0 +1,28 @@ +\documentclass{beamer} +\usetheme[numbering=progressbar]{focus} +\definecolor{main}{RGB}{47, 161, 219} +\definecolor{textcolor}{RGB}{128, 128, 128} +\definecolor{background}{RGB}{240, 247, 255} + + +\usepackage[utf8]{inputenc} +\usepackage{tikz} +\usepackage{listings} +\usepackage{adjustbox} +\usetikzlibrary{positioning} +\usetikzlibrary{shapes,arrows} +%\usepackage[T1]{fontenc} +%\usepackage[scaled]{beramono} + +\author{\small{\input{../includes/authors.txt}}} + +\title{Deep-dive into PyMISP} +\subtitle{MISP - Threat Sharing} +\institute{\href{http://www.misp-project.org/}{http://www.misp-project.org/} \\ Twitter: \emph{\href{https://twitter.com/mispproject}{@MISPProject}}} +\titlegraphic{\includegraphics[scale=0.85]{misp.pdf}} +\date{\input{../includes/location.txt}} + +\begin{document} +\include{content} +\end{document} + diff --git a/build.sh b/build.sh index b03f615..794bd24 100644 --- a/build.sh +++ b/build.sh @@ -1,7 +1,7 @@ #!/bin/bash # -slidedecks=("0-misp-introduction-to-information-sharing" "1-misp-usage" "1.2-misp-integration" "1.1-misp-viper-integration" "1.2.1-misp-integration-mail2misp" "2-misp-administration" "3-misp-taxonomy-tagging" "3.1-misp-modules" "3.2-misp-galaxy" "3.3-misp-object-template" "6.0-misp-dashboard" "a.0-contributing" "a.1-devintro") +slidedecks=("0-misp-introduction-to-information-sharing" "1-misp-usage" "1.2-misp-integration" "1.1-misp-viper-integration" "1.2.1-misp-integration-mail2misp" "2-misp-administration" "3-misp-taxonomy-tagging" "3.1-misp-modules" "3.2-misp-galaxy" "3.3-misp-object-template" "6.0-misp-dashboard" "a.0-contributing" "a.1-devintro" "a.2-pymisp") mkdir output export TEXINPUTS=::`pwd`/themes/ echo ${TEXINPUTS}