On 01/21/2013 05:46 PM, Doug Burks wrote:
After removing all set_ioprio_*() calls in the files pcap_mmap.c,
pcap_rw.c, pcap_sg.c, it's now rotating properly:

./netsniff-ng -i eth0 -o /tmp/test/ -s --prefix snort.log. --interval
1MiB --user 1 --group 1
netsniff-ng 0.5.8-rc0
Running! Hang up with ^C!

^C

Cannot set NIC flags!


ls -alh /tmp/test
total 5.0M
drwxr-xr-x  2 daemon daemon 4.0K Jan 21 11:44 .
drwxrwxrwt 13 root   root    12K Jan 21 11:41 ..
-rw-r--r--  1 root   root   1.1M Jan 21 11:44 snort.log.1358786624.pcap
-rw-r--r--  1 daemon daemon 1.1M Jan 21 11:44 snort.log.1358786641.pcap
-rw-r--r--  1 daemon daemon 1.1M Jan 21 11:44 snort.log.1358786656.pcap
-rw-r--r--  1 daemon daemon 1.1M Jan 21 11:44 snort.log.1358786674.pcap
-rw-r--r--  1 daemon daemon 683K Jan 21 11:45 snort.log.1358786691.pcap

Okay, so I will fix things up tonight and let you know when it's upstream.

On Mon, Jan 21, 2013 at 11:36 AM, Daniel Borkmann <[email protected]> wrote:
On 01/21/2013 05:28 PM, Daniel Borkmann wrote:

On 01/21/2013 05:16 PM, Doug Burks wrote:

Hi Daniel,

I tested using options similar to what we normally use.  It writes the
first pcap correctly (although I notice that the ownership is
root:root instead of daemon:daemon), but once the 1MiB interval has
been reached and netsniff-ng tries to rotate to the second pcap, it
fails when setting io prio.

./netsniff-ng -i eth0 -o /tmp/test/ -s --prefix snort.log. --interval
1MiB --user 1 --group 1
netsniff-ng 0.5.8-rc0
Running! Hang up with ^C!

Failed to set io prio for pid!


ls -alh /tmp/test/
total 3.3M
drwxr-xr-x  2 daemon daemon 4.0K Jan 21 11:08 .
drwxrwxrwt 13 root   root    12K Jan 21 11:06 ..
-rw-r--r--  1 root   root   1.1M Jan 21 11:05 snort.log.1358784314.pcap
-rw-r--r--  1 daemon daemon   24 Jan 21 11:05 snort.log.1358784337.pcap


Any ideas?


Thanks for your feedback / tests!

Ideas why it fails ... yes.

The privileges are currently dropped right before entering the main loop,
so
the first file is still opened as root. Basically, the issue is that in
the
background netsniff-ng does some more automatic tuning that requires
privileges
(like setting the disc I/O scheduling policy), instead of just opening a
file
and that's it.

So in the end, it's only useful for a couple of scenarios (for trafgen in
general
it's useful, netsniff-ng: for replaying a pcap, for recording a single
pcap, ...),
but probably not for the use case you have. Thus, I'm afraid, sticking
with the
setcap workaround might be the best solution.

I don't see a value in shortly regaining privileges and then dropping them
again
(if that's actually possible with effective/read IDs); probably, it might
be as
good as not dropping them at all.

Opinions?


If it concerns only the ioprio, we could add another pcap function that gets
called
once before dropping the privs.

Would it work for you, if you remove all set_ioprio_*() calls in the files
pcap_mmap.c,
pcap_rw.c, pcap_sg.c ?

If so, then we can do sth about it! ;-)

Let me know. Thanks!


On Mon, Jan 21, 2013 at 5:01 AM, Daniel Borkmann <[email protected]>
wrote:

On 01/19/2013 02:54 PM, Doug Burks wrote:


Thanks so much!



I'd be grateful if you can test it on your system.

It should work for most cases. In netsniff-ng, I've seen that it exits
non-gracefully
when netsniff-ng is in promisc mode, since after destroying the mmap'ed
rings it tries
to put the card into non-promisc again, but has no rights for it (since
we've dropped
it). I don't think it makes much sense to regain privileged rights only
for
the
cleanup work.


On Fri, Jan 18, 2013 at 3:37 PM, Daniel Borkmann
<[email protected]>
wrote:


On Sun, Dec 2, 2012 at 10:11 PM, Doug Burks <[email protected]>
wrote:


Well, since you asked...  :)

I know I can do the following to allow netsniff-ng to be run as a
non-root user:
sudo setcap cap_net_raw,cap_ipc_lock,cap_sys_admin,cap_net_admin=eip
netsniff-ng

But it would be quite nice if netsniff-ng had internal support for
dropping to a non-root user after opening the eth device.  Many other
pcap tools (such as daemonlogger, snort, suricata, etc.) support this
via command-line arguments like:
-u user -g group
OR
--user user --group group



Done, after setup, you can now drop privileges in netsniff-ng and
trafgen.

Thoughts?

Thanks for your consideration!

Doug


On Sun, Dec 2, 2012 at 3:50 PM, Daniel Borkmann
<[email protected]>
wrote:


By the way, if you have any other feature requests / wishes (besides
the list in TODO) that might be useful for many users, let us know,
and we'd be happy to further improve the toolkit.

On Sun, Dec 2, 2012 at 5:49 PM, Daniel Borkmann
<[email protected]> wrote:


On Sun, Dec 2, 2012 at 5:47 PM, Doug Burks <[email protected]>
wrote:


Thanks for the always fast response!  Deploying the "tcpdump -dd"
solution now.



Thanks!

If we have something new regarding bpfc, I'll announce it on the
list
anyway.

On Sun, Dec 2, 2012 at 9:00 AM, Daniel Borkmann
<[email protected]> wrote:


On Sun, Dec 2, 2012 at 2:55 PM, Doug Burks <[email protected]>
wrote:


On Tue, Oct 30, 2012 at 10:41 AM, Daniel Borkmann
<[email protected]> wrote:
<snip>


-f /etc/nsm/$HOSTNAME-$INTERFACE/bpf-pcap.conf
This should be the same option in netsniff-ng, but my
understanding is
that I'll need to convert my "human-readable" bpf-pcap.conf
using
"tcpdump -dd"?



Yes, it you want to use filters and bpf-pcap.conf contains
tcpdump-like filters, run them through "tcpdump -dd <my
filter>" >
out.ops and then pass out.ops to netsniff-ng via "--filter
out.ops".
That's it; netsniff-ng will then automatically enable the BPF
JIT
if
it's available in your kernel. This feature translates BPF
filters
into architecture optimized machine opcodes within the kernel.



We've officially replaced daemonlogger with netsniff-ng and it
appears
to be working well!  However, we haven't included BPF
functionality
yet, so I need to add that now.  I can do what's described
above,
but
the FAQ also says:



Cool, I'm very happy about that!

"If you try to create custom socket filters with tcpdump -dd,
you
have
to edit the ret opcode (0x6) of the resulting filter, otherwise
your
payload will be cut off:

0x6, 0, 0, 0xFFFFFFFF instead of 0x6, 0, 0, 0x00000060

The Linux kernel now takes skb->len instead of 0xFFFFFFFF. If
you
do
not change it, the kernel will take 0x00000060 as buffer length
and
packets larger than 96 Byte will be cut off (filled with zero
Bytes)!
It's a bug in libpcaps filter compiler. Detailed information
about
this issue can be found on our blog post."

The linked blog post is no longer available.  So is this an
issue I
need to be concerned about?



Actually not anymore. I use Fedora and the tcpdump version there
outputs:

# tcpdump -dd ip
tcpdump: WARNING: eth0: no IPv4 address assigned
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 1, 0x00000800 },
{ 0x6, 0, 0, 0x0000ffff },
{ 0x6, 0, 0, 0x00000000 },

So they have changed this from 0x00000060 into 0x0000ffff.

For bpfc itself, I didn't have time to finish the high-level
compiler,
yet. We have an assembler-like compiler where you can also create
filters with, but for usability you can use the method described
above, of course.

--





--
Doug Burks
http://securityonion.blogspot.com

--



--





--
Doug Burks
http://securityonion.blogspot.com

--



--











--






--


Reply via email to